3

Итак, у меня есть ряд строк, которые я хотел бы найти и заменить в документах Word.

Мои строки будут отображаться в виде таблицы с двумя столбцами. Я, вероятно, создал бы таблицу с помощью Word, а затем преобразовал бы ее вручную в TXT, или CSV, или что-то еще, что бы работало ... Мне не нужно автоматизировать эту часть. Таблица будет выглядеть примерно так:

English word     French word
dog     chien
cat     chat
London     Londres

Вы поняли идею ...

Мне нужен макрос, который ищет термины, содержащиеся в моем первом столбце, и заменяет их содержимым второго столбца.

Вы можете помочь? Спасибо!

2 ответа2

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

Создайте один из них для каждого слова, но это не будет читать вашу таблицу

1

Я взял на себя смелость позаимствовать фрагмент Райстафариана и расширить его. Вы должны изменить строку filename="c:\folder\file.txt на путь и имя файла простого текстового файла, где содержимым является слово или фраза, затем вкладка, затем слово или фраза, а затем конец линии. Я не беспокоился о проверке ошибок, поэтому, если у вас нет конца строки в последней строке, текст для этой строки не будет заменен. Также, если вы не включите вкладку в каждой строке, этот макрос, вероятно, сломается. Создайте резервную копию своего текстового документа, чтобы облегчить его восстановление.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .