1

ユーザーの Find+Replace All マクロを設定して、特定のテキストのすべてのインスタンスを検索して置換すると、計画どおりに機能しました。

しかし、その操作をマクロとして記録して実行すると、検索テキストの最初のインスタンスだけが置き換えられました。私は何を間違っていますか?

記録されたコードはさらに下にあります。

Sub Macro25()
'
' Macro25 Macro
'
'

    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Body Text")
    With Selection.Find.ParagraphFormat
        With .Shading
            .Texture = wdTextureNone
            .ForegroundPatternColor = wdColorBlack
            .BackgroundPatternColor = wdColorBlack
        End With
        .Borders.Shadow = False
    End With
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Body Text 2")
    With Selection.Find.Replacement.ParagraphFormat
        With .Shading
            .Texture = wdTextureNone
            .ForegroundPatternColor = wdColorBlack
            .BackgroundPatternColor = wdColorBlack
        End With
        .Borders.Shadow = False
    End With
    With Selection.Find
        .Text = ""
        .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
4

3 に答える 3

2

マクロは、マクロの実行時に選択したテキストのみを置き換えています。それがその言葉のSelection意味です。

Selectionドキュメント全体に対して検索/置換を実行する場合は、マクロをに置き換える必要がありますActiveDocument

于 2013-10-29T01:09:52.600 に答える
0

Selection.Find.Execute Replace:=wdReplaceAll 後に、End Withドキュメント全体を検索して置換する必要があります。

于 2015-07-21T05:52:18.023 に答える
0

答えてくれてありがとう。ここに移動します...以下は私が自分で書いたコードです。これは、マクロ レコーダーによって生成されたコードに基づいています。私のコードは、Selection の同じ考え方を使用していません。rng Range オブジェクトを使用します。

ただし、同じ効果が得られます。つまり、何かの最初のインスタンスのみを見つけているということです。

Function ExecReplaceStyle(strSourceStyle As String, strDestinationStyle As String) As Integer
        On Error GoTo ErrorHandler

        Dim rng As Range
        Dim ret As Integer

        ExecReplaceStyle = 0
        Set rng = docActiveDoc.Range

        With rng.Find
            .ClearFormatting
            .Style = ActiveDocument.Styles(strSourceStyle)
            .Replacement.Style = ActiveDocument.Styles(strDestinationStyle)
            .Text = ""
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Forward = True
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With

        rng.Select
        rng.Find.Execute Replace:=wdReplaceAll


        ExecReplaceStyle = ret

        Exit Function

    ErrorHandler:
        ExecReplaceStyle = Err.Number
        ErrDescription = Err.Description
        Resume Next
    End Function
于 2013-10-29T23:00:58.140 に答える