1

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」ファイルのそれぞれに同じマクロがあります)。OtherMacroFilename!OtherMacroOtherMacro

これは可能ですか?「Controller.xlsm」でマクロを使用してループしながら、「Target*.xlsm」でマクロを実行できますか?

「Target*.xlsm」などを開いてマクロを実行するオプションもあるようです。「Target*.xlsm」ファイルのマクロを実行するのに 2 時間かかる場合、問題が発生しますか? つまり、「Controller.xlsm」のマクロは、作業が完了する前に「Target*.xlsm」を保存して閉じようとしますか? ありがとう!

4

2 に答える 2