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


32

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


いい質問です。迅速で汚れたものは見つかりませんでした。しかし、私はそれは文書全体のスタイルに関連すると思う
イヴォFlipse

1
@Ivo、はい:)私は、文書のスタイルに関連する何かがあることにも思うが、私はWordでいない多くの経験を持つ貧しいSWの開発者です
ドレイク

@marco:更新された回答をご覧ください
通知があるまで一時停止します。

ええ、素晴らしい答えは本当にありがとう、非常に興味深い
ドレイク

回答:


38

一部の相互参照タイプは、「強参照」スタイルで自動的にフォーマットされますが、ほとんどは「通常の」テキストとしてフォーマットされます。

「強参照」スタイルを相互参照のテキストに適用するには:

  • テキストを選択
  • リボンの[ホーム]タブを選択します
  • リボンの[スタイル]グループの上下ボタンまたはドロップダウンボタンを使用して、[強力な参照]スタイル(または必要に応じて別のスタイル)を選択します。

特定のスタイルのすべてのテキストの外観を変更するには:

  • リボンの[ホーム]タブを選択します
  • リボンの[スタイル]グループのドロップダウンボタンを使用して、[スタイルを適用...]を選択します。
  • [スタイル名]の下の[スタイルの適用]ダイアログボックスで、変更するスタイルの名前を選択します(たとえば、[参照の強化])
  • 「変更...」ボタンをクリックします
  • 必要に応じてフォーマットを変更し、「OK」をクリックします

スタイルをすべての相互参照に一度に適用するには:

  • フィールドコードを表示するには、Alt+ F9を押します
  • リボンの[ホーム]タブを選択します
  • 「編集」グループの「置換」をクリックします
  • [検索対象]フィールドに次のように入力します ^19 REF
    • (これはキャレット-ワン-ナイン-スペース-REFです)
  • [置換]フィールドをクリックしますが、何も入力しないでください
  • 「詳細」ボタンをクリックします
  • ダイアログの下部セクションには「Replace」というタイトルが付いているはずです(その後に水平方向の規則があります)
  • 「フォーマット」ボタンをクリックし、「スタイル...」を選択します
  • スタイルを選択して(たとえば、「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

実際、ほとんどの参照は、すべてではないにしても、通常のテキストでデフォルトで作成されます。答えてくれてありがとう、しかしこの場合、一度にすべてのスタイルを更新する前に、それぞれのスタイルを手動で設定する必要があります。私は、プロセスの最初のステップを自動化することができる方法を探していた
ドレイク

6
うわー、私は非常に参考に、検索/置換のこの高度な使用法を知らなかった
ドレイク

6
答えは、凝縮された知識の小さな宝石です。独自のウィキに値する!
絶望の

5
イエス・キリスト...これはうまく機能しますが、問題は次のとおりです。相互参照にスタイルを適用することをなぜそんなに難しくするのですか?;)
レニエルマッカフェリ

Mac上のMS Word 16.9.1では、これは機能します(マクロを試していない)が、検索/置換はホームリボン上ではなく(私が思う?)、代わりに[編集]-> [検索]-> [詳細設定]検索と置換
マイケル

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

Wordで作業を高速化するためにマクロを使用するのは初めてです。サイボーグにこのような役立つマクロをありがとう。


0

高速で効果的な方法:

  1. 参照に使用する書式設定を含むテキストを選択します。
  2. リボンの[ ホーム ]タブを選択します。
  3. Normalスタイルを右クリックし、選択に一致するようにUpdate Normalを選択します。
  4. Ctrl+ AF9.で参照を更新します。

0

このマクロは相互参照ダイアログボックスを開き、現在のカーソル位置に相互参照を挿入します。

参照を挿入した後に外部参照ダイアログボックスを閉じると、マクロは再開し、挿入された相互参照を上付き文字にフォーマットします。

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でグラハムSKAN外部参照ダイアログを開く方法について。


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.