Ich versuche, ein Makro zu erstellen, um eine Massensuche und -ersetzung in mehreren Word-Dokumenten durchzuführen. Ich habe dieses im Internet gefunden und geändert, erhalte jedoch immer einen Laufzeitfehler (5174), der besagt, dass die Datei nicht gefunden werden konnte (obwohl sie sich definitiv im Ordner befindet).
Auch nachdem ich eine Lösung für das ursprüngliche Problem gefunden habe, muss ich in der Lage sein, Bilder zu suchen und zu ersetzen, die sich in einer Fußzeile befinden.
Sub ReplaceText()
Dim Directory As String
Dim FType As String
Dim FName As String
Directory = "C:\Users\pieria\Desktop\TempPics"
FType = "*.docx"
ChDir Directory
FName = Dir(FType)
' for each file you find, run this loop
Do While FName <> ""
' open the file
Documents.Open FileName:=FName '<--Error is supposedly here
' search and replace the company name
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "CompanyA"
.MatchCase = True
.Replacement.Text = "CompanyB"
End With
Selection.Find.Execute Replace:=wdReplaceAll
' save and close the current document
ActiveDocument.Close wdSaveChanges
' look for next matching file
FName = Dir
Loop
End Sub
Antwort1
Funktioniert bei mir einwandfrei. Ich vermute, dass Ihre Eingabedatei beschädigt ist und/oder der Dateiname falsch ist.
Zeit, mit dem Debuggen zu beginnen:
Im VBA-Editoreinen Haltepunkt setzenauf der Documents.Open FileName:=FName
Linie, undfüge eine Uhr hinzuZu Fname
.
Führen Sie den Code aus und notieren Sie sich jedes Mal, wenn er anhält, den Dateinamen, an dem gearbeitet wird (angezeigt im Bereich „Überwachte Dateien“). Wenn der Fehler nun ausgegeben wird, wissen Sie, mit welcher Datei das Problem auftritt.
Überprüfen Sie die Datei auf Beschädigungen, Berechtigungsprobleme und/oder allgemeine Merkwürdigkeiten. :)
Antwort2
Hier ist eine mögliche Antwort; sie ist benutzerfreundlich gestaltet:
Public Sub MassReplace()
Dim strPath As String
Dim strFile As String
Dim FType As String
Dim FName As String
Dim strFind As String
Dim strReplace As String
Dim WordApp As Object
Dim WordDoc As Object
'Der obige Text definiert Ihre Objekte
strFind = InputBox("Enter Text to find")
strReplace = InputBox("Enter replacement Text")
' Der Benutzer definiert den Text, den er suchen und ersetzen möchte, mithilfe von Eingabefeldern
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show Then
strPath = .SelectedItems(1)
Else
MsgBox "No folder selected!", vbExclamation
Exit Sub
End If
End With
If Right(strPath, 1) <> "\" Then
strPath = strPath & "\"
strFile = Dir(strPath & "*.docx*")
End If
Application.ScreenUpdating = False
'Der obige Codeblock ermöglicht dem Benutzer, die zu durchsuchende Ordnerdatei auszuwählen
Do While strFile <> "" 'Do this while strFile is not blank
Set WordApp = CreateObject("Word.Application") 'Open MS word
WordApp.Visible = True 'Make word visible
Set WordDoc = WordApp.Documents.Open(strPath & strFile) 'open file in folder
WordApp.ActiveDocument.Range.Select ' select all text
With WordApp.Selection.Find 'Using the find function allows a search of text
.Text = strFind 'find "strFind"
.Replacement.Text = strReplace 'replacement text is "strReplace"
.Wrap = wdFindContinue
'.Format = False
'.MatchCase = False
'.MatchWholeWord = False
'.MatchWildcards = False
'.MatchSoundsLike = False
.Execute Replace:=wdReplaceAll 'replace all text
WordApp.ActiveDocument.Close wdSaveChanges 'Close document and save changes
End With 'End with block
WordApp.Quit 'Close the word application
strFile = Dir 'Go back to the directory
Loop
Application.ScreenUpdating = True
End Sub
Dies scheint für Word 2016 gut zu funktionieren. Es ermöglicht einem Benutzer, seinen Dateipfad zu definieren und verwendet Eingabefelder, um Text zu definieren, der ersetzt/gesucht werden soll. Um Zahlen statt Text zu ersetzen, definieren Sie strFind und strReplace als Ganzzahlen (oder einen anderen Zahlentyp) statt als Text. Viel Spaß beim Programmieren!