여러 Word 파일을 어떻게 검색하고 바꿀 수 있습니까?


10

프로세스의 자동화를 위해 많은 Word (.doc) 파일에서 검색하고 바꾸는 방법을 찾고 있습니다.

지금까지 찾은 소프트웨어는 검색 만 할 수 있지만 교체 할 수는 없습니다.

Word로 어떻게 할 수 있습니까?

답변:


7

VBA 찾기 및 바꾸기 (캐시 된 링크)를 시도 할 수 있습니다.

VBA 찾기 및 바꾸기 ©는 단일 사용자 정의 "find"및 "replace"변수 쌍 또는 "find"및 "replace"의 사용자 정의 목록을 사용하여 문서 (또는 문서 모음)에서 텍스트를 찾아서 바꾸는 방법을 제공합니다. 한 쌍. 또한 텍스트를 찾고 사용자가 정의한 "자동 텍스트"또는 "빌딩 블록"항목으로 텍스트를 바꾸는 방법을 제공합니다.


이것은 내가 원했던 것처럼 보입니다-당신은 바위!
탈 Galili

이 플러그인은 어떤 파일을 검색합니까? 시작 디렉토리를 지정할 가능성을 찾을 수 없습니다. 열려있는 모든 파일 만 사용합니까? 교체하지 않고 어떻게 검색합니까?
Michael S.

2
@gentlesea가 '배치 폴더의 파일 처리'설정이 도움이되지 않습니까?
Jay Wick

1
URL 끝에 추가 기간이 있습니다. URL을 제거하지만 StackOverflow가 잘못 설계되어 다음을 방지합니다. gregmaxey.mvps.org/VBA_Find_And_Replace.htm
Chris Adams

1
정말 고마워요 (:
p._phidot_

0

주어진 루트 폴더 아래의 여러 폴더에있는 여러 MS Word 파일에서 여러 일반 및 와일드 카드 기반 대체를 실행하기 위해 다음 VBA 매크로를 만들었습니다. 그것을 사용하기 위해 다음 변수 (상수)의 내용을 변경했습니다.

  • rootPath : Word 문서가 들어있는 폴더가있는 루트 폴더입니다.
  • findTextsWildreplaceTextsWild : 와일드 카드 기반 찾기 및 바꾸기 표현식의 배열입니다.
  • findTexts and replaceTexts : 일반적인 찾기 및 바꾸기 식의 배열입니다.

도움이 될 것입니다 :-)

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


-1

Microsoft Word를 소유하지 않고 도움이 될 무료 대안을 찾고 있다면 OpenOffice.org를 사용해보십시오 .

이 프로세스를 자동화하는 방법을 찾고 있다면 이것이 도움이 될 것이라고 생각하지 않습니다.


-1

메모장 ++ "파일에서 찾기"를 사용 하여이 작업을 수행 할 수 있습니다


키보드 단축키 Ctrl + Shift + F
Yitzchak

2
메모장 ++는 Microsoft Word 문서를 열 수 있습니까?
Daniel Beck

1
이것은 문자열 일치 및 대체 문자열이 특수 문자가 아닌 경우 작동 할 수 있습니다. Word 2007+ 문서는 사실상 XML 파일이기 때문입니다. 그러나 나는 그렇게 말했다. 답변으로 게시하기 전에이를 테스트 해 보셨습니까?
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

3
이 코드 블록은 무엇이며 어떤 역할을하며이 문제를 해결하는 데 어떻게 도움이됩니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.