web-dev-qa-db-ja.com

Wordマクロ:2列のテーブルに基づいてテキスト内の文字列を置き換える方法は?

そのため、Word文書で検索して置換したい一連の文字列があります。

私の文字列は2列のテーブルとして表示されます。私はおそらくWordでテーブルを作成し、それを手動でTXTやCSVなどに変換します...その部分を自動化する必要はありません。テーブルはおおよそ次のようになります。

English Word     French Word
dog     chien
cat     chat
London     Londres

あなたはアイデアを得る...

最初の列に含まれている用語を検索し、それらを2番目の列のコンテンツに置き換えるマクロが必要です。

手伝ってくれますか?ありがとうございました!

3
Paulie
Selection.Find.ClearFormatting
With Selection.Find
.Text = "English Word"
.Replacement.Text = "French Word"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute

Wordごとにこれらの1つを作成しますが、これはテーブルを読み取りません

1
Raystafarian

Raystafarianのスニペットを自由に借りて、それを拡張しました。行を変更しますfilename="c:\folder\file.txtプレーンテキストファイルのパスとファイル名を使用します。内容は、単語またはフレーズ、タブ、単語またはフレーズ、行末です。エラーチェックは気にしなかったので、最後の行に行末がない場合、その行のテキストは置き換えられません。また、各行にタブを含めないと、このマクロはおそらく壊れます。簡単に元に戻せるように、Word文書をバックアップしてください。

Sub Macro1()
    Dim ff As Long
    Dim x As Long
    Dim filename As String
    Dim buffer As String
    Dim charbuffer As String * 1

    filename = "c:\folder\file.txt"

    ff = FreeFile
    Open filename For Binary As ff
    buffer = ""
    charbuffer = ""
    For x = 1 To LOF(ff)
        Get #ff, , charbuffer
        If charbuffer <> vbCr And charbuffer <> vbLf Then
            buffer = buffer & charbuffer
        Else
            If buffer <> "" Then processBuffer buffer
            buffer = ""
        End If
    Next x
    Close ff


End Sub
Sub processBuffer(buffer As String)
    Dim varArray As Variant
    varArray = Split(buffer, vbTab)
    makeReplacements varArray(0), varArray(1)
End Sub
Sub makeReplacements(ByVal strToReplace As String, ByVal strReplacement As String)

    'MsgBox strToReplace & " will be replaced by " & strReplacement

    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = strToReplace
        .Replacement.Text = strReplacement
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
End Sub
1
horatio