多数のワークブックでのマクロの実行(Microsoft Excel)
マクロを使用して処理するワークブックがかなりある場合は、処理マクロを各ワークブック内に(Auto_Openマクロとして)配置してから、各ワークブックをロードするための何らかのタイプのルーチンを記述したくなる場合があります。順番に、それを保存します。
これは理論的には良いように聞こえるかもしれませんが、実際には機能しません。どうして?
マクロ制御下でブックを開くと、開いているブックのAuto_Openマクロが自動的に実行されないためです。この問題を回避するには3つの方法があります。
1つ目は、各ブックのAuto_Openマクロに依存しないようにマクロをやり直すことです。各ブックのAuto_Openマクロが同じである場合は、コードを制御ブックの別のプロシージャに移動してみませんか?たとえば、次のプロセスに従ったコードを使用していたとします。
Sub MyMacro() Dim J As Integer Dim sTarget As String Application.ScreenUpdating = False For J = 1 To 999 sTarget = "Book" & Format(J, "000") & ".xls" Workbooks.Open sTarget 'Auto_Open runs here Workbooks(sTarget).Save Next J Application.ScreenUpdating = True End Sub
すでに説明した理由により、これは機能しません。 1つの解決策は、次のように、一般的なAuto_Openコードを別のプロシージャに移動し、ブックを開いた後に呼び出すことです。
Sub MyMacro() Dim J As Integer Dim sTarget As String Application.ScreenUpdating = False For J = 1 To 999 sTarget = "Book" & Format(J, "000") & ".xls" Workbooks.Open sTarget Workbooks(sTarget).Activate DoCommonCode Workbooks(sTarget).Save Next J Application.ScreenUpdating = True End Sub
Sub DoCommonCode() 'Common code goes here End Sub
このアプローチは、ルーチンがすべての異なるワークブックで実行されるものと同じであれば、正常に機能します。ブックごとにルーチンが異なる場合は、VBAにAuto_Openマクロを実行させることができます。これは、ブックを開いた直後にRunAutoMacrosメソッドを使用して実行されます。
Workbooks.Open sTarget ActiveWorkbook.RunAutoMacros xlAutoOpen
このアプローチを考えると、各ワークブックを開くだけのマクロを簡単に思い付くことができ(Auto_Openマクロを実行できるように)、それらを保存することができます。このようなマクロは次のように表示されます。
Sub RunAutoOpenMacrosInBooks() Dim J As Integer Dim sTarget As String Application.ScreenUpdating = False For J = 1 To 999 sTarget = "Book" & Format(J, "000") & ".xls" On Error Resume Next Workbooks.Open sTarget Windows(sTarget).Activate With ActiveWorkbook If .Name <> ThisWorkbook.Name Then .RunAutoMacros xlAutoOpen .Save .Close End If End With Next i Application.ScreenUpdating = True End Sub
3番目の、さらに優れたアプローチは、各ブックのAuto_Openマクロに依存しないことです。代わりに、マクロを実行する方法としてWorkbook_openイベントに依存してください。 Workbook_openイベントは、ブックが手動で開かれたか別のマクロで開かれたかに関係なく、自動的にトリガーされます。 Auto_Openマクロに期待するのと同じように、イベントに含まれるコードは自動的に実行されます。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(2278)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。
link多数のワークブックでマクロを実行する。