Есть несколько проблем с вашим кодом. Например, вы указываете:
Dim objDoc As Document
но нет указания, используете ли вы раннее или позднее связывание; у вас даже нет строки, ссылающейся на приложение Word. Если бы вы использовали раннее связывание, я бы ожидал увидеть что-то вроде:
Dim wdApp As New Word.Application, wdDoc as Word.Document
Для позднего связывания я бы ожидал увидеть что-то вроде:
Dim objWord as Object, objDoc As Object
плюс код для создания экземпляра Word. Затем вы использовали бы:
Set wdDoc = wdApp.Documents.Open(Filename:=strFolder & "\" & strFile)
или
Set objDoc = objWord.Documents.Open(Filename:=strFolder & "\" & strFile)
в зависимости от ситуации.
Кроме того, ваш код обработки документов может быть улучшен. Например, вы можете заменить все:
With objDoc
With Selection
.HomeKey Unit:=wdStory
With Selection.Find
.Text = strFindText1
.Replacement.Text = strReplaceText1
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End With
objDoc.Save
objDoc.Close
с:
With objDoc
With .Range.Find
.Text = strFindText1
.Replacement.Text = strReplaceText1
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=2 'wdReplaceAll
End With
.Close True
End With
Чтобы начать работу с кодом, попробуйте:
Sub BulkFindReplace()
'Note: this code requires a reference to the Word object model.
'See under the VBE's Tools|References.
Dim wdApp As New Word.Application, wdDoc As Word.Document
Dim strFolder As String, strFile As String, StrFnd As String, StrRep As String
strFolder = GetFolder
If strFolder = "" Then Exit Sub
StrFnd = ActiveWorkbook.Sheets("Sheet1").Range("C2").Value
StrRep = ActiveWorkbook.Sheets("Sheet1").Range("D2").Value
strFile = Dir(strFolder & "\*.docx", vbNormal)
While strFile <> ""
Set wdDoc = wdApp.Documents.Open(Filename:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False)
With wdDoc
With .Range.Find
.Text = StrFnd
.Replacement.Text = StrRep
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
.Close SaveChanges:=True
End With
strFile = Dir()
Wend
wdApp.Quit
Set wdDoc = Nothing: Set wdApp = Nothing
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