1

Word文書で特定の文字の置換を実行するVBスクリプトを作成しようとしていますが、次の方法で管理しました:

objSelection.Find.Text = "["
objSelection.Find.Forward = TRUE
objSelection.Find.Replacement.Text = "q"
objSelection.Find.Execute ,,,,,,,,,,2
objSelection.Find.Text = "{"
objSelection.Find.Forward = TRUE
objSelection.Find.Replacement.Text = "w"
objSelection.Find.Execute ,,,,,,,,,,2
objSelection.Find.Text = "^"
objSelection.Find.Forward = TRUE
objSelection.Find.Replacement.Text = "y"
objSelection.Find.Execute ,,,,,,,,,,2
objSelection.Find.Text = "~"
objSelection.Find.Forward = TRUE
objSelection.Find.Replacement.Text = "z"
objSelection.Find.Execute ,,,,,,,,,,2
objSelection.Find.Text = "]"
objSelection.Find.Forward = TRUE
objSelection.Find.Replacement.Text = "x"
objSelection.Find.Execute ,,,,,,,,,,2
objSelection.Find.Text = "}"
objSelection.Find.Forward = TRUE
objSelection.Find.Replacement.Text = "ć"
objSelection.Find.Execute ,,,,,,,,,,2
objSelection.Find.Text = "@"
objSelection.Find.Forward = TRUE
objSelection.Find.Replacement.Text = "]"
objSelection.Find.Execute ,,,,,,,,,,2

ただし、特にテキストファイルが数MBの場合に置換する必要がある文字数を増やす場合、私がなんとかした方法は非常に遅いです...したがって、スクリプトは文字を置換するたびにドキュメント全体を処理しますその結果、スクリプトの実行が非常に遅くなります。Word ドキュメント内の複数の文字を並行して変更する可能性はありますか?スクリプトはドキュメントを 1 回だけ通過し、どの文字が検出されたかに応じて置換を実行しますか? また、単語ドキュメントから変数に行ごとにロードし、置換のために各文字を指定された文字と比較して、スクリプトの実行がはるかに遅くなることを試みました...英語で申し訳ありませんが、問題を説明できたことを願っています。私を助けてください。ありがとうございました。:)

4

1 に答える 1

0

このようなことができますか?

objSelection.Find.ClearFormatting
With objSelection.Find
    .Text = "[\[\{~\]\}\@^0094]" ' ^0094 is "^"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = 1 'wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With

Do While objSelection.Find.Execute()
    Dim t: t = objSelection.Text
    Select Case t
        Case "["
            objSelection.Text = "q"
        Case "{"
            objSelection.Text = "w"
        Case "~"
            objSelection.Text = "z"
        '... fill in the rest
    End Select
    objSelection.Move 1
Loop

これは、単一の文字を探して置き換える場合にのみ機能すると思いますが、探している文字のいずれかに一致し、見つかった文字を確認して適切な文字に置き換えます。

これは Word 2010 で記録されたマクロから取得したものですが、VBScript への変換は必要ないと思います。

于 2012-11-14T22:36:24.180 に答える