0

3 つのスペースのうち最初の文字列の後に続く特定の文字列の形式を青色のフォントの数字に置き換えるマクロと、括弧内のスペースとそれに続く特定の文字列を置き換えるマクロを作成しました。

これらの 2 つの手順を最適化する方法を知っていますか (MS-Word の検索と置換のダイアログでワイルドカードを使用していますが、VBA でこれを使用するのはかなり厄介だと思います..)?

私のマクロ:

Sub replace_3spaces()

Dim str_after As String
Dim re_number As Integer

str_after = "normal"
re_number = "1"

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([^s]{3})" & "(" & str_after & ")"
        .Replacement.Text = "§§§\2"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.Font.ColorIndex = wdBlue
    With Selection.Find
        .Text = "§§§"
        .Replacement.Text = re_number & " "
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
4

1 に答える 1

0

コードが機能するため、何をしようとしているのか完全にはわかりませ最適化と言うとき、それを行うためのより速い方法があるかどうかを尋ねていますか、それともコードを短縮できるかどうかを尋ねていますか?最初に設定した寸法の理由がわからないため、より短いコードを探している場合は、次を使用できます。

    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "([^s]{3})(normal)"
        .Replacement.Text = "§§§\2"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
        .Forward = False
        .ClearFormatting
        .Replacement.Font.ColorIndex = wdBlue
        .Format = True
        .Text = "§§§"
        .Replacement.Text = "1 "
        .Execute Replace:=wdReplaceAll
    End With

あなたがそれらの次元を持っていて、それらの1つに番号を使用したという事実に基づいて、私はあなたが実際に各インスタンスに番号が与えられる番号付けシステムを作成しようとしていたと思わざるを得ません。その場合は、次のコードを使用します。

Dim str_after, oldColor As String
Dim re_number As Integer

str_after = "normal"
re_number = "1"

    Selection.HomeKey unit:=wdStory
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "([^s]{3})" & "(" & str_after & ")"
        .Replacement.Text = "§§§\2"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
        While Selection.Find.Execute
            oldColor = Selection.Font.Color
            Selection.Font.Color = wdColorBlue
            Selection.TypeText Text:=re_number & " "
            Selection.Font.Color = oldColor
            Selection.TypeText Text:=str_after
            re_number = re_number + 1
        Wend
于 2012-12-14T23:39:43.120 に答える