대량 찾기 및 바꾸기 - Microsoft Word 2013

대량 찾기 및 바꾸기 - Microsoft Word 2013

여러 단어 문서에서 대량 찾기 및 바꾸기를 수행하기 위해 매크로를 만들려고 합니다. 나는 이것을 인터넷에서 찾아 변경했지만 파일을 찾을 수 없다는 런타임 오류(5174)가 계속 발생합니다(분명히 폴더에 있음에도 불구하고).

또한 초기 문제에 대한 해결책을 찾은 후에는 바닥글에 있는 사진을 찾아서 바꿀 수 있어야 합니다.

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

답변1

나에게는 잘 작동합니다. 내 생각엔 입력 파일이 손상되었거나 파일 이름이 불안정한 것 같습니다.

디버깅을 시작할 시간:

VBA 편집기에서중단점을 설정하다라인에 Documents.Open FileName:=FName그리고시계 추가에게 Fname.

코드를 실행하고 중지될 때마다 작업 중인 파일 이름을 기록해 둡니다("Watches" 창에 표시됨). 이제 오류가 발생하면 어떤 파일에 문제가 있는지 알 수 있습니다.

해당 파일의 손상, 권한 문제 및/또는 일반적인 이상한 점을 확인하십시오. :)

브레이크 앤 워치

답변2

다음은 잠재적인 답변입니다. 사용자 친화적으로 설계되었습니다.

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

'위의 텍스트는 개체를 정의합니다

 strFind = InputBox("Enter Text to find") 

 strReplace = InputBox("Enter replacement Text") 

' 사용자는 입력 상자를 사용하여 찾고 바꾸려는 텍스트를 정의합니다.

    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

'위의 코드 블록을 통해 사용자는 검색할 폴더 파일을 선택할 수 있습니다.

 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

이는 Word 2016에서 잘 작동하는 것 같습니다. 사용자가 파일 경로를 정의하고 입력 상자를 사용하여 바꾸거나 찾을 텍스트를 정의할 수 있습니다. 텍스트 대신 숫자를 바꾸려면 strFind 및 strReplace를 텍스트 대신 정수(또는 다른 숫자 유형)로 정의하세요. 즐거운 코딩하세요!

관련 정보