Home » Questions » Computers [ Ask a new question ]

Is it possible to assign a specific style to all cross-references in Word 2007?

Is it possible to assign a specific style to all cross-references in Word 2007?

Nothing more to add, I would like to change the style of all cross-references I have in a Word 2007 document at once. But I have no idea how to do it. How can this be done?

Asked by: Guest | Views: 45
Total answers/comments: 3
Guest [Entry]

"Some cross-reference types are automatically formatted with the ""intense reference"" style, but most are formatted as ""normal"" text.

To apply the ""intense reference"" style to the text of the cross reference:

select the text
choose the ""Home"" tab in the ribbon
using either the up-down buttons or the drop-down button in the ""Styles"" group of the ribbon, choose the ""intense reference"" style (or another style if you prefer)

To change the appearance of all text of a given style:

choose the ""Home"" tab in the ribbon
using the drop-down button in the ""Styles"" group of the ribbon, choose ""Apply styles...""
in the ""Apply Styles"" dialog box under ""Style Name"" choose the name of the style you want to change (e.g. ""intense reference"")
Click the ""Modify..."" button
Change the formatting to suit you and click ""OK""

To apply a style to all cross references at once:

Press Alt+F9 to show field codes
Select the ""Home"" tab in the ribbon
Click on ""Replace"" in the ""Editing"" group
In the ""Find what"" field, type ^19 REF

(That's caret-one-nine-space-R-E-F)

Click in the ""Replace with"" field, but don't type anything
Click the ""More"" button
The bottom section of the dialog should be titled ""Replace"" (with a horizontal rule after it)
Click the ""Format"" button and select ""Style...""
Choose a style (e.g. ""Intense Reference"") and click OK
It should now show the style you selected under the ""Replace with"" field
Click ""Replace All"" if you're feeling brave or use ""Find Next"" and ""Replace"" to step through and replace or skip each reference field code's style individually
Press Alt+F9 to hide field codes

See this page for more information on special codes in Find and Replace.

Here is a macro that will add the switch \* mergeformat to each of the fields. This switch is necessary to keep the formatting from being lost if you do a field update. You can assign the macro to a keystroke and it will step through the fields one at a time for each time you press the keystroke. You can also edit the macro to loop over the whole document to automate the process.

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"
Guest [Entry]

"editing the macro uploaded by the cyborg, we can easily automate showing and hiding the field codes. so that every time we wish to update we do not have to use toggle field codes. I used following code to add field code toggle.

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

The complete macro is as follows:

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

This is the first time I am using macros to speed up my work in word. thanks cyborg for such helpful macro."
Guest [Entry]

"Combining answers above with another function to loop through document 'stories', to apply styling on document body, headers, footers and text on shapes.

Simply call the SetCrossRefStyle() macro below to apply ""Intense Reference"" style to all cross references.

Sub m_SetCHARFORMAT(textRanges As Collection)
' 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)
' 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
' wordmvp.com/FAQs/Customization/ReplaceAnywhere.htm
' 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"