Стивен спросил, можно ли управлять форматом перекрестных ссылок, вставляемых 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 [Управление форматом перекрестных ссылок].