Можно ли назначить определенный стиль для всех перекрестных ссылок в Word 2007?

32

Больше нечего добавить, я бы хотел сразу изменить стиль всех перекрестных ссылок, которые есть в документе Word 2007. Но я понятия не имею, как это сделать. Как это может быть сделано?

селезень
источник
Хороший вопрос, я не мог найти ничего быстрого и грязного. Но я думаю, что это связано со стилем всего документа
Иво Флипс
1
@ Иво, да, я тоже думаю, что это связано со стилем документа, но я плохой SW-разработчик, у которого нет большого опыта работы с Word :)
Дрейк,
@marco: см. мой обновленный ответ
Приостановлено до дальнейшего уведомления.
да, отличный ответ, большое спасибо, очень очень интересно
Дрейк

Ответы:

38

Некоторые типы перекрестных ссылок автоматически форматируются в стиле «интенсивная ссылка», но большинство форматируются как «обычный» текст.

Чтобы применить стиль «интенсивная ссылка» к тексту перекрестной ссылки:

  • выберите текст
  • выберите вкладку «Главная» на ленте
  • с помощью кнопок «вверх» или «вниз» в группе «Стили» на ленте выберите стиль «интенсивная ссылка» (или другой стиль, если хотите)

Чтобы изменить внешний вид всего текста данного стиля:

  • выберите вкладку «Главная» на ленте
  • используя кнопку раскрывающегося списка в группе «Стили», выберите «Применить стили ...»
  • в диалоговом окне «Применить стили» под «Имя стиля» выберите название стиля, который вы хотите изменить (например, «интенсивная ссылка»)
  • Нажмите кнопку «Изменить ...»
  • Измените форматирование в соответствии с вашими предпочтениями и нажмите «ОК»

Чтобы применить стиль ко всем перекрестным ссылкам одновременно:

  • Нажмите Alt+, F9чтобы показать коды полей
  • Выберите вкладку «Главная» на ленте
  • Нажмите «Заменить» в группе «Редактирование»
  • В поле «Найти что» введите ^19 REF
    • (Это Caret-One-девять-Space-REF)
  • Нажмите в поле «Заменить», но ничего не вводите
  • Нажмите кнопку «Еще»
  • Нижняя часть диалога должна называться «Заменить» (с горизонтальным правилом после него)
  • Нажмите кнопку «Формат» и выберите «Стиль ...»
  • Выберите стиль (например, «Интенсивная ссылка») и нажмите «ОК».
  • Теперь должен отображаться стиль, выбранный вами в поле «Заменить»
  • Нажмите «Заменить все», если вы чувствуете себя смелым, или используйте «Найти далее» и «Заменить», чтобы пройти и заменить или пропустить стиль кода каждого ссылочного поля по отдельности.
  • Нажмите Alt+, F9чтобы скрыть коды полей

Смотрите эту страницу для получения дополнительной информации о специальных кодах в Find and Replace.

Вот макрос, который добавит переключатель \* mergeformatв каждое из полей. Этот переключатель необходим для предотвращения потери форматирования при обновлении поля. Вы можете назначить макрос на нажатие клавиши, и он будет проходить по полям по одному за каждый раз, когда вы нажимаете клавишу. Вы также можете отредактировать макрос, чтобы зациклить весь документ для автоматизации процесса.

Sub mf()
'
' mf Macro
' Find cross references and add \* mergeformat
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^19 REF"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="\* mergeformat "
    Selection.Find.Execute
End Sub
Приостановлено до дальнейшего уведомления.
источник
фактически большинство ссылок, если не все, создаются по умолчанию с обычным текстом. Спасибо за ответ, но в этом случае мне нужно вручную установить стиль каждого из них, прежде чем я смогу обновить стиль для всех сразу. Я искал метод, который может автоматизировать первый шаг процесса
Дрейк
6
вау, я не знал, что такое расширенное использование поиска / замены, очень полезно
Дрейк
6
Вы отвечаете - маленький драгоценный камень сжатых знаний. Стоит своей вики!
Гримаса Отчаяния
5
Иисус Христос ... это прекрасно работает, но дело в том: зачем так сложно применять стиль к перекрестным ссылкам !? ;)
Лениэль Маккаферри
на MS Word 16.9.1 на Mac это работает (не пробовал макрос), но поиск / замена не на домашней ленте (я думаю?), а вместо этого в меню под Edit-> Find-> Advanced Найти и заменить ...
Майкл
5
  • Нажмите Alt+, F9чтобы показать коды полей
  • Используйте следующий макрос, чтобы добавить CHARFORMAT ко всем перекрестным ссылкам. Этот макрос добавляет строку в поле, только если ее там еще нет.

    Sub SetCHARFORMAT()
    '
    ' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
    '
    '
        Dim oField As Field
        Dim oRng As Range
        For Each oField In ActiveDocument.Fields
        'For Each oField In Selection.Fields
            If InStr(1, oField.Code, "REF ") = 2 Then
                If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
                    oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
                End If
                If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
                    oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
                End If
            End If
        Next oField
    
    
    End Sub
  • Используйте этот макрос для форматирования всех перекрестных ссылок со стилем «Тонкая ссылка» (убедитесь, что у вас есть такой стиль, и что отображаются коды полей):

    Sub SetCrossRefStyle()
    '
    ' Macro to set styole of all cross references to "Subtle Reference"
    '
    '
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Style = ActiveDocument.Styles( _
            "Subtle Reference")
        With Selection.Find
            .Text = "^19 REF"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
  • Нажмите Alt+, F9чтобы скрыть коды полей

киборг
источник
3

редактируя макрос, загруженный киборгом, мы можем легко автоматизировать показ и скрытие кодов полей. так что каждый раз, когда мы хотим обновить, нам не нужно использовать коды полей переключения. Я использовал следующий код для добавления переключателя кода поля.

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

Полный макрос выглядит следующим образом:

Sub SetCrossRefStyle()
'
' Macro to set styole of all cross references to "Subtle Reference"
'
'
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
    "Subtle Reference")
With Selection.Find
    .Text = "^19 REF"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub

Это первый раз, когда я использую макросы, чтобы ускорить мою работу в слове. спасибо киборг за такой полезный макрос.

Джейкрушна патель
источник
0

Быстрый и эффективный способ:

  1. Выделите текст с форматированием, которое вы хотите использовать для ссылок.
  2. Выберите вкладку « Главная » на ленте.
  3. Щелкните правой кнопкой мыши стиль Normal и выберите « Обновить Normal», чтобы соответствовать выбору .
  4. Ссылки Update с Ctrl+ A, F9.
Евгений
источник
0

Этот макрос открывает диалоговое окно Перекрестная ссылка для вставки перекрестной ссылки в текущей позиции курсора.

Когда вы закрываете диалоговое окно Xref после вставки ссылки, макрос возобновляет форматирование вставленной перекрестной ссылки в верхний индекс.

Sub XrefSuper()
'
' This opens the Cross Reference dialogue box to insert a cross reference at the current cursor position.
'   When the dialogue box is closed after inserting the reference the macro resumes to format the inserted cross reference to superscript.
'
'
Dim wc As Integer
    wc = ActiveDocument.Characters.Count

Dim dlg As Dialog
    Set dlg = Dialogs(wdDialogInsertCrossReference)
        dlg.Show 'Open dialogue and perform the insertion from the dialog box) 
                 'Macro continues after closing CrossRef dialogue box

    If wc = ActiveDocument.Characters.Count Then Exit Sub   'If we failed to insert something then exit

    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Font.Superscript = wdToggle
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Font.Superscript = wdToggle
End Sub

Спасибо Грэму Скану в ExpertsExchange за то, как открыть диалог Xref.

TJH
источник
0

Объединение приведенных выше ответов с другой функцией позволяет циклически просматривать «истории» документа, применять стили к телу документа, верхним и нижним колонтитулам и тексту для фигур.

Просто вызовите макрос SetCrossRefStyle () ниже, чтобы применить стиль «Интенсивная ссылка» ко всем перекрестным ссылкам.

Sub m_SetCHARFORMAT(textRanges As Collection)
' https://superuser.com/questions/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
    Dim oField As Field
    Dim oRng As Range
    For Each oRng In textRanges
        For Each oField In oRng.Fields
            If InStr(1, oField.Code, "REF ") = 2 Then
                If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
                    oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
                End If
                If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
                    oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
                End If
            End If
        Next oField
    Next oRng
End Sub


Sub m_AddCrossRefStyle(textRanges As Collection)
' https://superuser.com/questions/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Macro to set style of all cross references to "Intense Reference"
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
    For Each oRng In textRanges
        oRng.Find.ClearFormatting
        oRng.Find.Replacement.ClearFormatting
        oRng.Find.Replacement.Style = ActiveDocument.Styles("Intense Reference")
        With oRng.Find
            .Text = "^19 REF"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        oRng.Find.Execute Replace:=wdReplaceAll
    Next oRng
End Sub


Function m_GetAllTextRanges() As Collection
' https://wordmvp.com/FAQs/Customization/ReplaceAnywhere.htm
' https://www.mrexcel.com/forum/excel-questions/443052-returning-collection-function.html
'
' Get text ranges in all document parts.
'
    Set m_GetAllTextRanges = New Collection
    For Each rngStory In ActiveDocument.StoryRanges
        'Iterate through all linked stories
        Do
            m_GetAllTextRanges.Add rngStory
            On Error Resume Next
            Select Case rngStory.StoryType
                Case 6, 7, 8, 9, 10, 11
                If rngStory.ShapeRange.Count > 0 Then
                    For Each oShp In rngStory.ShapeRange
                        If oShp.TextFrame.HasText Then
                            m_GetAllTextRanges.Add oShp.TextFrame.TextRange
                        End If
                    Next
                End If
                Case Else
                    'Do Nothing
            End Select
            On Error GoTo 0
            'Get next linked story (if any)
            Set rngStory = rngStory.NextStoryRange
        Loop Until rngStory Is Nothing
    Next
End Function

Sub SetCrossRefStyle()
'
' 1. Get all text ranges since Selection.Find only works on document body, but not on headers/footers
' 2. Add CHARFORMAT to make styling persistent
' 3. Add styling to all references
'
    Dim textRanges As Collection
    Set textRanges = m_GetAllTextRanges
    ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
    m_SetCHARFORMAT textRanges
    m_AddCrossRefStyle textRanges
    ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub
eymre
источник