HOME > 即効テクニック > Excel VBA > ファイル操作関連のテクニック > ブックのオープンと自動実行マクロ

即効テクニック

ファイル操作関連のテクニック

ブックのオープンと自動実行マクロ

(Excel 97/2000/2002/2003/2007)
ブックを開くには、WorkbooksコレクションのOpenメソッドを使います。
次のコードは、C:\Book3.xlsを開きます。

Sub Sample1()
  Workbooks.Open "C:\Book3.xls"
End Sub   
このとき、C:\Book3.xlsのWorkbook_Openに自動実行マクロが記述されていると、ブックを開くと同時に実行されます。 Openメソッドで開くブックの自動実行マクロを実行してよいのでしたら普通に開けばいいです。 しかし、自動実行マクロを実行しないでブックを開きたいときは、Excelのイベントを抑止してやります。 次のコードは、C:\Book3.xlsを開きますが、Workbook_Openの自動実行マクロは実行しません。
Sub Sample2()
  Application.EnableEvents = False
  Workbooks.Open "C:\Book3.xls"
  Application.EnableEvents = True
End Sub   
Excelのイベントを抑止するには、ApplicationオブジェクトのEnableEventsプロパティにFalseを指定します。 そのままでは、その後もイベントが発生しませんので、処理が終わったらTrueを設定して元に戻すのを忘れないでください。 さて、ブックを開いたときに自動実行されるマクロには、もう一つの種類があります。 それは、標準モジュールに作成した「Sub Auto_Open」というプロシージャです。 現在のようなWorkbookやWorksheetのイベントが利用できるようになったのは、Excel 97からです。 その前のExcel 5.0やExcel 95には、現在のようなイベントがありませんでした。 そこで、標準モジュール(当時はモジュールシートと呼んでいました)に「Auto_Open」という名前のプロシージャを作成すると、Excelがそのプロシージャを自動実行してくれたのです。 こうした自動実行プロシージャには、ほかにも「Auto_Close」や「Auto_Add」などがあります。 しかし、WorkbookのOpenイベントに記述したマクロとは逆に、標準モジュールに記述した「Auto_Open」プロシージャは、そのブックがマクロから開かれたときに実行されないという特徴がありました。 C:\Book3.xlsに「Auto_Open」で自動実行プロシージャを作成してあっても下記のコードでは実行されないのです。
Sub Sample1()
  Workbooks.Open "C:\Book3.xls"
End Sub   
このような自動実行プロシージャを実行させたいときは、RunAutoMacrosメソッドを使います。 次のコードは、C:\Book3.xlsを開いて「Auto_Open」を実行します。
Sub Sample3()
  Workbooks.Open "C:\Book3.xls"
  ActiveWorkbook.RunAutoMacros xlAutoOpen
End Sub