Вы можете попробовать что-то вроде:
Sub KeyWordFinder()
Application.ScreenUpdating = False
Dim strFolder As String, strFile As String, strDocNm As String, i As Long
Dim DocSrc As Document, DocTgt As Document, StrFnd As String, StrOut As String
strFolder = GetFolder: If strFolder = "" Then Exit Sub
Set DocTgt = ThisDocument: strDocNm = DocTgt.FullName
StrFnd = "|": Options.DefaultHighlightColorIndex = wdYellow
With DocTgt.Tables(1)
For i = 2 To .Rows.Count
StrFnd = StrFnd & Split(.Rows(i).Cells(1).Range.Text, vbCr)(0) & "|"
Next
End With
While strFile <> ""
If strFolder & "\" & strFile <> strDocNm Then
Set DocSrc = Documents.Open(FileName:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False)
With DocSrc
With .Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Text = "^&"
.Replacement.Highlight = True
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
'Process each word from the StrFnd List
For i = 1 To UBound(Split(StrFnd, "|"))
.Text = Split(StrFnd, "|")(i)
.Execute Replace:=wdReplaceAll
If .Found = True Then
StrOut = StrOut & Split(StrFnd, "|")(i) & " found in " & strFile & Chr(11)
End If
Next
End With
.Close True
End With
End If
DoEvents
strFile = Dir()
Wend
DocTgt.Range.InsertAfter StrOut
Set DocSrc = Nothing: Set DocTgt = Nothing
Application.ScreenUpdating = True
End Sub
Function GetFolder() As String
Dim oFolder As Object
GetFolder = ""
Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choose a folder", 0)
If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path
Set oFolder = Nothing
End Function
В кодированном виде макрос предполагает, что вывод должен быть отправлен в документ, из которого он запускается, и что список ключевых слов находится в первом столбце.первой таблицы в этом документе, начиная со строки 2. Код включает в себя браузер папок, поэтому все, что вам нужно сделать, это выбрать папку для обработки.Я сохранил ваши спецификации подсветки, хотя не вижу смысла их иметь, так как ваш код удаляет найденное содержимое из файлов, прежде чем удалять файлы в любом случае.Моя реализация выделяет найденный контент в исходных файлах.Если вы не хотите этого делать, вы также можете удалить:
: Options.DefaultHighlightColorIndex = wdYellow
.Replacement.Highlight = True
.Replacement.Text= "^ &"
и
Заменить: = wdReplaceAll
, а также изменить:
. Закрыть True
на:
.Закрыть False
Какой бы подход к нему ни был, приведенный выше код должен быть намного эффективнее, чем тот, который вы сейчас используете.