Dem ist nichts hinzuzufügen. Ich möchte den Stil aller Querverweise in einem Word 2007-Dokument auf einmal ändern . Aber ich habe keine Ahnung, wie es geht. Wie geht das?
Dem ist nichts hinzuzufügen. Ich möchte den Stil aller Querverweise in einem Word 2007-Dokument auf einmal ändern . Aber ich habe keine Ahnung, wie es geht. Wie geht das?
Antworten:
Einige Querverweistypen werden automatisch mit dem Stil "Intensive Referenz" formatiert, die meisten werden jedoch als "normaler" Text formatiert.
So wenden Sie den Stil "Intensive Referenz" auf den Text des Querverweises an:
So ändern Sie das Erscheinungsbild des gesamten Texts eines bestimmten Stils:
So wenden Sie einen Stil auf alle Querverweise gleichzeitig an:
^19 REF
Auf dieser Seite finden Sie weitere Informationen zu speziellen Codes unter Suchen und Ersetzen.
Hier ist ein Makro, das den Schalter \* mergeformat
zu jedem der Felder hinzufügt . Dieser Schalter ist erforderlich, um zu verhindern, dass die Formatierung verloren geht, wenn Sie eine Feldaktualisierung durchführen. Sie können das Makro einem Tastendruck zuweisen. Bei jedem Tastendruck werden die Felder einzeln durchlaufen. Sie können das Makro auch bearbeiten, um eine Schleife über das gesamte Dokument zu erstellen und den Prozess zu automatisieren.
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
Verwenden Sie das folgende Makro, um allen Querverweisen CHARFORMAT hinzuzufügen. Dieses Makro fügt die Zeichenfolge nur dann zum Feld hinzu, wenn sie noch nicht vorhanden ist.
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
Verwenden Sie dieses Makro, um alle Querverweise mit dem Stil "Subtle Reference" zu formatieren (stellen Sie sicher, dass Sie einen solchen Stil haben und die Feldfunktionen angezeigt werden):
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
Drücken Sie Alt+ F9, um die Feldfunktionen auszublenden
Wenn Sie das vom Cyborg hochgeladene Makro bearbeiten, können Sie das Ein- und Ausblenden der Feldfunktionen ganz einfach automatisieren. Damit müssen wir nicht jedes Mal, wenn wir aktualisieren möchten, die Feldfunktionen umschalten. Ich habe folgenden Code verwendet, um den Feldcode umzuschalten.
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
Das vollständige Makro lautet wie folgt:
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
Dies ist das erste Mal, dass ich Makros verwende, um meine Arbeit in Word zu beschleunigen. Danke Cyborg für dieses hilfreiche Makro.
Schneller und effektiver Weg:
Dieses Makro öffnet das Dialogfeld Querverweis, in dem Sie an der aktuellen Cursorposition einen Querverweis einfügen können.
Wenn Sie das Dialogfeld XRef nach dem Einfügen des Verweises schließen, wird der Makro fortgesetzt, um den eingefügten Verweis auf hochgestellt zu formatieren.
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
Vielen Dank an Graham Skan von ExpertsExchange für das Öffnen des XRef-Dialogs.
Kombinieren Sie die obigen Antworten mit einer anderen Funktion, um Dokument-Storys zu durchlaufen und Formatierungen für Dokumentkörper, Kopf- und Fußzeilen sowie Text auf Formen anzuwenden.
Rufen Sie einfach das unten stehende SetCrossRefStyle () - Makro auf, um den Stil "Intensive Referenz" auf alle Querverweise anzuwenden.
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