Макрос Word: как заменить строки в тексте на основе таблицы с двумя столбцами?

4463
Paulie

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

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

English word French word dog chien cat chat London Londres 

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

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

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

3

2 ответа на вопрос

1
Raystafarian
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
horatio

Я взял на себя смелость позаимствовать фрагмент Райстафариана и расширить его. Вы бы изменили строку 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 
Обратите внимание, что вы не хотите включать заголовок таблицы (т. Е. «Английское слово, французское слово») в текстовый документ. horatio 12 лет назад 0

Похожие вопросы