100 個のファイルのそれぞれに埋め込まれているマクロを、手動で開いたり、実行したり、保存したり、閉じたりせずに実行しようとしています。マクロは、実行したい「ターゲット」ファイルにのみ含まれています。
これを行う方法についてこのSO の質問を見つけ、ローカルで動作するようにしました。
Sub ProcessFiles()
Dim Filename, Pathname As String
Dim wb As Workbook
Pathname = ThisWorkbook.Path
Wildcard = "Target*.xlsm"
Filename = Dir(Pathname & "\" & Wildcard)
Do While Filename <> ""
Set wb = Workbooks.Open(Pathname & "\" & Filename)
DoWork wb
wb.Close SaveChanges:=True
Filename = Dir()
Loop
End Sub
Sub DoWork(wb As Workbook)
With wb
'Do your work here
.Worksheets(1).Range("A1").Value = "Goodbye World!"
End With
End Sub
この VBA スクリプトを「Controller.xlsm」に配置するとDoWork()
、「Target1.xlsm」、「Target2.xlsm」などの名前のターゲット ファイルのフォルダーでマクロを実行できます。DoWork()
しかし、各ターゲットにのみ存在するマクロ (このマシン上のソフトウェアを呼び出すすべて同じマクロ)に置き換えたいと考えています。やのDoWork()
ようなものに置き換えてみましたが、どちらも機能しません ( 「Target*.xlsm」ファイルのそれぞれに同じマクロがあります)。OtherMacro
Filename!OtherMacro
OtherMacro
これは可能ですか?「Controller.xlsm」でマクロを使用してループしながら、「Target*.xlsm」でマクロを実行できますか?
「Target*.xlsm」などを開いてマクロを実行するオプションもあるようです。「Target*.xlsm」ファイルのマクロを実行するのに 2 時間かかる場合、問題が発生しますか? つまり、「Controller.xlsm」のマクロは、作業が完了する前に「Target*.xlsm」を保存して閉じようとしますか? ありがとう!