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!

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


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

Note que você não deseja incluir um cabeçalho de tabela (ie english word French word) em seu documento de texto.
horatio
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.