Більше нічого додати, я б хотів одразу змінити стиль усіх перехресних посилань, які є у документі Word 2007. Але я поняття не маю, як це зробити. Як це можна зробити?
Більше нічого додати, я б хотів одразу змінити стиль усіх перехресних посилань, які є у документі Word 2007. Але я поняття не маю, як це зробити. Як це можна зробити?
Відповіді:
Деякі типи перехресних посилань автоматично форматуються у стилі "інтенсивна довідка", проте більшість форматується як "звичайний" текст.
Щоб застосувати стиль "інтенсивного посилання" до тексту перехресного посилання:
Щоб змінити зовнішній вигляд всього тексту заданого стилю:
Щоб застосувати стиль до всіх перехресних посилань одночасно:
^19 REF
Дивіться цю сторінку для отримання додаткової інформації про спеціальні коди в розділі Знайти та замінити.
Ось макрос, який додасть комутатор \* 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
Використовуйте наступний макрос, щоб додати 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щоб приховати коди полів
редагуючи макрос, завантажений кіборгом, ми можемо легко автоматизувати показ та приховування кодів поля. так що кожен раз, коли ми хочемо оновити, нам не доведеться використовувати перемикані кодові поля. Я використовував наступний код для додавання перемикання коду поля.
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
Це вперше я використовую макроси, щоб прискорити роботу словом. дякую Кіборгу за такий корисний макрос.
Швидкий та ефективний спосіб:
Цей макрос відкриває діалогове вікно "Перехресний довідник", щоб вставити перехресну посилання на поточну позицію курсору.
Коли ви закриєте діалогове вікно 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.
Поєднуючи відповіді вище з іншою функцією, щоб переглядати "історії" документа, застосовувати стилі на корпус документа, заголовки, колонтитули та текст на фігурах.
Просто зателефонуйте макросу SetCrossRefStyle () нижче, щоб застосувати стиль "Інтенсивна довідка" до всіх перехресних посилань.
Sub m_SetCHARFORMAT(textRanges As Collection)
' /superuser/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)
' /superuser/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