Macro do Word: como substituir strings em um texto, com base em uma tabela de 2 colunas?

3

Então eu tenho uma série de seqüências de caracteres que gostaria de pesquisar e substituir em documentos do Word.

Minhas cordas seriam exibidas como uma tabela de duas colunas. Eu provavelmente criaria a tabela com o Word, então a converteria manualmente para TXT, ou CSV ou qualquer coisa que funcionasse ... Eu não preciso automatizar essa parte. A tabela seria mais ou menos assim:

English word     French word
dog     chien
cat     chat
London     Londres

Você entendeu a ideia...

Preciso de uma macro que pesquise os termos contidos na minha primeira coluna e substitua-os pelo conteúdo da segunda coluna.

Você pode ajudar? Obrigado!

Paulie
fonte

Respostas:

1
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

Crie um desses para cada palavra, mas isso não vai ler sua tabela

Raystafarian
fonte
1

Tomei a liberdade de pegar emprestado o fragmento de Raystafarian e expandi-lo. Você alteraria a linha filename="c:\folder\file.txtcom o caminho e o nome de arquivo de um arquivo de texto simples, em que o conteúdo é uma palavra ou frase, seguido por uma guia, seguida por uma palavra ou frase, seguido por um fim de linha. Eu não me incomodei com a verificação de erros, por isso, se você não tiver um fim de linha na última linha, o texto dessa linha não será substituído. Além disso, se você não incluir uma guia em cada linha, essa macro provavelmente será interrompida. Faça o backup do seu documento do Word para facilitar a reversão.

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
horatio
fonte
Note que você não deseja incluir um cabeçalho de tabela (ie english word French word) em seu documento de texto.
horatio