Управление форматом перекрестных ссылок (Microsoft Word)
Стивен спросил, можно ли управлять форматом перекрестных ссылок, вставляемых Word. Когда он вставляет метку и номер, такие как Таблица 1 или Рисунок 12, ему нужны строчные буквы метки (таблица, рисунок) и неразрывный пробел между меткой и номером.
В Word нет возможности контролировать этот тип форматирования перекрестных ссылок. Очевидно, вы можете изменить перекрестные ссылки вручную после их размещения, но всякий раз, когда вы обновляете поля, для них будет использоваться исходный формат, выбранный Word. Есть несколько решений на основе макросов, которые вы можете попробовать. Первое решение изменит фактические коды полей, используемые для поля:
Sub FieldRefChanges1() On Error Resume Next Dim oStoryRng As Range Dim oFld As Field For Each oStoryRng In ActiveDocument.StoryRanges For Each oFld In oStoryRng.Fields If oFld.Type = wdFieldRef And oFld.Result.Words.Count <= 2 Then 'add format switch with lowercase option to field codes oFld.Code.Text = oFld.Code.Text & "\* lower " 'updates the field results to display the new format oFld.Update End If Next oFld Next oStoryRng End Sub
Макрос включает несколько вложенных циклов For. Первый проходит через каждую историю в документе, а второй — через каждое поле в каждой истории. Затем используется оператор If, чтобы убедиться, что поле является полем REF (тип, используемый для перекрестных ссылок), и что результатом поля является два или меньше слов (как в таблице 1 или на рисунке 12).
Если эти критерии соблюдены, то макрос изменяет фактический код поля, добавляя переключатель, в результате чего поле отображается в нижнем регистре.
У этого макроса есть пара недостатков. Во-первых, если вы запустите его несколько раз, переключатель \ * lower будет добавлен в поля REF несколько раз. Во-вторых, макрос не изменяет пробел в результатах поля на неразрывный.
Чтобы преодолеть обе проблемы, просто измените макрос так, чтобы он автоматизировал ручной процесс, через который вы должны были бы изменить результаты макроса.
Sub FieldRefChanges2() On Error Resume Next Dim oStoryRng As Range Dim oFld As Field Dim sTemp As String Dim J As String For Each oStoryRng In ActiveDocument.StoryRanges For Each oFld In oStoryRng.Fields If oFld.Type = wdFieldRef And oFld.Result.Words.Count <= 2 Then sTemp = oFld.Result.Text sTemp = LCase(sTemp) J = InStr(sTemp, " ") sTemp = Left(sTemp, J - 1) & Chr(160) & _ Mid(sTemp, J + 1, Len(sTemp) - J) oFld.Result.Text = sTemp End If Next oFld Next oStoryRng End Sub
Этот макрос по сути такой же, как и предыдущий, за исключением того, что он работает строго с текстом результата для поля. Текст присваивается переменной sTemp, которая затем преобразуется в нижний регистр. Положение пространства определяется, и оно заменяется неразрывным пространством. Затем результат вставляется обратно в текст результата для поля.
_Примечание: _
Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
WordTips — ваш источник экономичного обучения работе с Microsoft Word.
(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (141) применим к Microsoft Word 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Word (Word 2007 и позже) здесь:
link: / wordribbon-Controlling_the_Format_of_Cross-References [Управление форматом перекрестных ссылок]
.