Wie kann ich in mehreren Word-Dateien suchen und ersetzen?

10

Ich suche nach einer Möglichkeit, in vielen Word-Dateien (.doc) zu suchen und zu ersetzen (zum Zweck der Automatisierung des Prozesses).

Mit der Software, die ich bisher gefunden habe, kann ich nur suchen, aber nicht ersetzen.

Wie kann ich das mit Word machen?

Tal Galili
quelle

Antworten:

7

Sie können VBA Find & Replace (zwischengespeicherter Link) ausprobieren .

VBA Find and Replace © bietet eine Methode zum Suchen und Ersetzen von Text an einer beliebigen Stelle in einem Dokument (oder einer Sammlung von Dokumenten) unter Verwendung einzelner benutzerdefinierter Variablenpaare "Suchen" und "Ersetzen" oder einer benutzerdefinierten Liste von "Suchen" und "Ersetzen". Paare. Es bietet auch eine Methode zum Suchen von Text und zum Ersetzen von gefundenem Text durch einen benutzerdefinierten Eintrag "AutoText" oder "Building Block".

Jay
quelle
Das sieht genauso aus wie ich es wollte - Du rockst!
Tal Galili
Über welche Dateien sucht dieses Plugin? Ich kann keine Möglichkeit finden, ein Startverzeichnis anzugeben. Verwendet es nur alle geöffneten Dateien? Und wie suche ich einfach ohne zu ersetzen?
Michael S.
2
@gentlesea hilft die Einstellung "Dateien im Stapelordner verarbeiten" nicht?
Jay
1
Es gibt einen zusätzlichen Punkt am Ende dieser URL - ich würde sie entfernen, aber StackOverflow ist falsch gestaltet und verhindert dies: gregmaxey.mvps.org/VBA_Find_And_Replace.htm
Chris Adams
1
Danke, ich weiß es wirklich zu schätzen. (:
p._phidot_
0

Um mehrere normale und Wildcard-basierte Ersetzungen in mehreren MS Word-Dateien auszuführen, die sich in mehreren Ordnern unter einem bestimmten Stammordner befinden, habe ich das folgende VBA-Makro erstellt. Um es zu verwenden, müssen Sie den Inhalt der folgenden Variablen (Konstanten) ändern:

  • rootPath : Stammordner, unter dem sich Ordner befinden, die Word-Dokumente enthalten.
  • findTextsWild und replaceTextsWild : Array von Platzhalter-basierten Such- und Ersetzungsausdrücken .
  • findTexts und replaceTexts : Array normaler Such- und Ersetzungsausdrücke .

Vielleicht findest du es nützlich :-)

Sub GlobalTextReplacement()
' Root under which all manuals are stored
Dim rootPath As String
rootPath = "c:\Data\Manuals\"

' Find and replace text for wildcard replacement. Performed first.
Dim findTextsWild() As Variant, replaceTextsWild() As Variant
findTextsWild = Array("[ ]{2;}", "[cC]onfiguration[/ ]@[pP]olicy [rR]epository", "[sS]ervlet[- ]@[fF]ilter")
replaceTextsWild = Array(" ", "Configuration/Policy Repository", "Servlet-Filter")

' Find and replace text for normal case insensitive replacement. Performed second.
Dim findTexts() As Variant, replaceTexts() As Variant
findTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "servletfilter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p ", " ^p")
replaceTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "Servlet-Filter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p", "^p")

' Main code
Application.ScreenUpdating = False

Dim dirNames(20) As String
Dim dirNamesCount As Integer
dirNamesCount = 0

Dim dirName As String
dirName = Dir$(rootPath & "*", vbDirectory)
Do Until LenB(dirName) = 0
    Dim dirPath As String
    dirPath = rootPath & dirName
    If ((GetAttr(dirPath) And vbDirectory) = vbDirectory) And (dirName <> ".") And (dirName <> "..") Then
        dirNamesCount = dirNamesCount + 1
        dirNames(dirNamesCount) = dirPath & "\"
    End If
    dirName = Dir$
Loop

Do While dirNamesCount > 0
    Dim fileName As String
    dirName = dirNames(dirNamesCount)
    dirNamesCount = dirNamesCount - 1
    fileName = Dir$(dirName & "*.doc", vbDirectory)
    Do Until LenB(fileName) = 0
        Dim filePath As String
        filePath = dirName & fileName
        fileName = Dir$

        Dim document As document
        Set document = Documents.Open(filePath)
        document.TrackRevisions = True

        document.Select

        Dim i As Integer, maxIndex As Integer
        maxIndex = UBound(findTextsWild)
        For i = LBound(findTextsWild) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTextsWild(i)
                .Replacement.Text = replaceTextsWild(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchWildcards:=True
            End With
        Next

        maxIndex = UBound(findTexts)
        For i = LBound(findTexts) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTexts(i)
                .Replacement.Text = replaceTexts(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchCase:=False, MatchWildcards:=False
            End With
        Next

        document.Save
        document.Close
    Loop
Loop

Application.ScreenUpdating = True
End Sub
Maxwell
quelle
-1

Wenn Sie Microsoft Word nicht besitzen und nach einer kostenlosen Alternative suchen, die Ihnen hilft, versuchen Sie es mit OpenOffice.org .

Ich denke nicht, dass dies Ihnen helfen wird, wenn Sie nach einer Möglichkeit suchen, diesen Prozess zu automatisieren.

Doug Harris
quelle
-1

Notepad ++ kann dies mit "In Dateien suchen" tun

Zeyrkelian
quelle
Tastaturkürzel Strg + Umschalt + F
Yitzchak
2
Notepad ++ kann Microsoft Word-Dokumente öffnen?
Daniel Beck
1
Dies kann funktionieren, wenn die Zeichenfolgenübereinstimmung und die Ersatzzeichenfolge keine Sonderzeichen sind, da Word 2007+ -Dokumente von Natur aus XML-Dateien sind. Aber ich sagte es kann. Haben Sie sich darum gekümmert, dies zu testen, bevor Sie es als Antwort veröffentlichen?
Tumchaaditya
-2
Option Explicit

Public Sub BatchReplaceAll()
    Dim FirstLoop As Boolean
    Dim myFile As String
    Dim PathToUse As String
    Dim myDoc As Document
    Dim Response As Long

    PathToUse = ActiveDocument.Path
    On Error Resume Next
    Documents.Close SaveChanges:=wdPromptToSaveChanges
    FirstLoop = True
    myFile = Dir$(PathToUse & "\*.doc*")

    While myFile <> ""
        Set myDoc = Documents.Open(PathToUse & "\" & myFile)
        If FirstLoop Then
            Application.Dialogs(wdDialogEditReplace).Show
            FirstLoop = False

            Response = MsgBox("Do you want to process the rest of the files in this folder", vbYesNo)
            If Response = vbNo Then Exit Sub
        Else
            With Dialogs(wdDialogEditReplace)
                .ReplaceAll = 1
                .Execute
            End With
        End If
        myDoc.Close SaveChanges:=wdSaveChanges
        myFile = Dir$()
    Wend
End Sub
Avadhani
quelle
3
Was ist dieser Codeblock, was macht er und wie kann er zur Lösung dieses Problems beitragen?
Moses