microsoft office – Word 2007ですべての相互参照に特定のスタイルを割り当てることは可能ですか?

microsoft-office microsoft-word microsoft-word-2007

これ以上何も付け加えることはありませんが、私はWord2007の文書内にあるすべての相互参照のスタイルを一度に変更したいと思っています。しかし、私はそれを行う方法を見当がつきません。どのようにすればいいのでしょうか?

  39  Drake  2009-07-27


ベストアンサー

クロスリファレンスの種類によっては、自動的に「強烈なリファレンス」スタイルでフォーマットされるものもありますが、ほとんどは「通常の」テキストとしてフォーマットされています

クロスリファレンスの本文に「強烈なリファレンス」スタイルを適用する

  • 文章を選ぶ
  • リボンの「ホーム」タブを選択します
  • を使用して、リボンの “スタイル” グループのアップダウン ボタンまたはドロップダウン ボタンを使用して、”強烈な参照” スタイルを選択します (お好みであれば別のスタイルでも可)

指定されたスタイルのすべてのテキストの外観を変更する

  • リボンの「ホーム」タブを選択します
  • リボンの “スタイル” グループのドロップダウン ボタンを使用して、”スタイルの適用…” を選択します
  • スタイルの適用」ダイアログボックスの「スタイル名」で、変更したいスタイルの名前を選択します(例:「激しい参照」)
  • 修正…」ボタンをクリックします
  • 自分に合ったフォーマットに変更して、「OK」をクリックします

すべてのクロスリファレンスに一度にスタイルを適用する

  • Alt+F9を押すとフィールドコードが表示されます
  • リボンの「ホーム」タブを選択します
  • 編集」グループの「置換」をクリックします
  • Find what” フィールドに ^19 REF と入力します
    • (That’s caret-one-nine-space-R-E-F)
  • Replace with」の欄をクリックしますが、何も入力しないでください
  • もっと見る」ボタンをクリックします
  • ダイアログの一番下の部分は「置換」というタイトルにしてください(後に横書きのルールをつけて)
  • 書式」ボタンをクリックし、「スタイル」を選択します
  • スタイルを選択して(例:”Intense Reference”)、[OK]をクリックします
  • 置換先」フィールドで選択したスタイルが表示されるようになりました
  • 勇気があれば「すべて置換」をクリックするか、「次を検索」と「置換」を使用して、各参照フィールドコードのスタイルを個別にステップスルーして置換したりスキップしたりすることができます
  • Alt+F9を押すとフィールドコードが非表示になります

検索と置換の特殊コードの詳細については、このページを参照してください

ここでは、各フィールドにスイッチ \* mergeformat を追加するマクロを紹介します。このスイッチは、フィールドの更新を行った場合にフォーマットが失われないようにするために必要です。このマクロをキーストロークに割り当てると、キーストロークを押すたびにフィールドを 1 つずつステップスルーします。また、マクロを編集してドキュメント全体をループさせ、プロセスを自動化することもできます

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

45  Paused until further notice.  2009-07-27


  • 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
    
  • このマクロを使用して、すべてのクロスリファレンスを “Subtle Reference “スタイルでフォーマットします(そのようなスタイルがあることを確認し、フィールドコードが表示されていることを確認してください)

    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を押すとフィールドコードが非表示になります

6  cyborg  2012-02-05


サイボーグがアップロードしたマクロを編集することで、フィールドコードの表示・非表示を簡単に自動化することができます。以下のコードを使って、フィールドコードのトグルを追加してみました

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

このような有用なマクロを提供してくれたサイボーグさんに感謝します

4  Jaykrushna patel  2017-09-21


迅速かつ効果的な方法です

  1. 参照に使用する書式を持つテキストを選択します
  2. リボンの[ホーム]タブを選択します
  3. 法線スタイルを右クリックして、選択範囲に合わせて法線を更新を選択します
  4. Ctrl + A, F9で参照を更新します

0  Evgeny  2013-02-08


このマクロは、現在のカーソル位置にクロスリファレンスを挿入するためのクロスリファレンスダイアログボックスを開きます

参照を挿入した後に 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

Xref ダイアログを開く方法については、Graham Skan at ExpertsExchangeに感謝します

0  TJH  2018-01-19


上記の答えを、ドキュメントの「ストーリー」をループする別の関数と組み合わせて、ドキュメントの本文、ヘッダー、フッター、およびシェイプ上のテキストにスタイリングを適用します

以下のSetCrossRefStyle()マクロを呼び出すだけで、すべてのクロスリファレンスに “Intense Reference “スタイルが適用されます

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

0  eymre  2019-04-06


タイトルとURLをコピーしました