一括検索と置換 - Microsoft Word 2013

一括検索と置換 - Microsoft Word 2013

複数の Word 文書で一括検索と置換を行うマクロを作成しようとしています。ネットでこのマクロを見つけて変更しましたが、ファイルが見つからないという実行時エラー (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

コードを実行し、停止するたびに、処理中のファイル名 (「ウォッチ」ペインに表示される) を書き留めます。これで、エラーが発生したときに、どのファイルに問題があるかがわかります。

そのファイルに破損、権限の問題、および/または一般的な異常がないか確認してください。 :)

ブレイク・アンド・ウォッチ

答え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 をテキストではなく整数 (または別の数値型) として定義します。コーディングを楽しんでください。

関連情報