複数の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
私にとってはうまくいきます。私の推測では、壊れた入力ファイルや不安定なファイル名を持っていると思います。
デバッグを開始する時間:
VBAエディターで、 ブレークポイントを設定Documents.Open FileName:=FName
行、および ウォッチを追加Fname
に。
コードを実行し、停止するたびに、作業中のファイル名をメモします([ウォッチ]ペインに表示されます)。これで、エラーがスローされたときに、問題が発生しているファイルがわかります。
そのファイルをチェックして、破損、権限の問題、および/または一般的な奇妙さを確認してください。 :)
これが潜在的な答えです、それはユーザーフレンドリーになるように設計されています:
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
これはWord2016でうまく機能するようです。これにより、ユーザーはファイルパスを定義し、入力ボックスを使用して置換/検索するテキストを定義できます。テキストの代わりに数値を置き換えるには、strFindとstrReplaceをテキストではなく整数(または別の数値タイプ)として定義します。ハッピーコーディング!