Massensuchen und Ersetzen - Microsoft Word 2013

Massensuchen und Ersetzen - Microsoft Word 2013

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:=FNameLinie, 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. :)

Einbrechen und zuschauen

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!

verwandte Informationen