답변:
VBA 찾기 및 바꾸기 (캐시 된 링크)를 시도 할 수 있습니다.
VBA 찾기 및 바꾸기 ©는 단일 사용자 정의 "find"및 "replace"변수 쌍 또는 "find"및 "replace"의 사용자 정의 목록을 사용하여 문서 (또는 문서 모음)에서 텍스트를 찾아서 바꾸는 방법을 제공합니다. 한 쌍. 또한 텍스트를 찾고 사용자가 정의한 "자동 텍스트"또는 "빌딩 블록"항목으로 텍스트를 바꾸는 방법을 제공합니다.
주어진 루트 폴더 아래의 여러 폴더에있는 여러 MS Word 파일에서 여러 일반 및 와일드 카드 기반 대체를 실행하기 위해 다음 VBA 매크로를 만들었습니다. 그것을 사용하기 위해 다음 변수 (상수)의 내용을 변경했습니다.
도움이 될 것입니다 :-)
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
Microsoft Word 자체로는 할 수 없습니까?
편집 메뉴 (Word 2003) 또는 홈 탭 / 편집 섹션 (Word 2007)에 있습니다.
Microsoft Word를 소유하지 않고 도움이 될 무료 대안을 찾고 있다면 OpenOffice.org를 사용해보십시오 .
이 프로세스를 자동화하는 방법을 찾고 있다면 이것이 도움이 될 것이라고 생각하지 않습니다.
메모장 ++ "파일에서 찾기"를 사용 하여이 작업을 수행 할 수 있습니다
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