目次
Enable
今回は、自動実行するマクロを含んだワークブックを Workbooks.Open メソッドで開く時に、自動実行するマクロを実行しない方法を試してみました。
「Application」オブジェクトの「EnableEvents」プロパティを使用すると Excel アプリのイベント発生の有効、無効を設定出来るようです。
「EnableEvents」の「Enable」(イネーブル)の英語の意味をインターネットの辞書で調べてみると「有効にする」「可能にする」などの意味があるようです。
対義語は「Disable」(ディスエーブル)のようで「Disable」は「無効にする」などの意味があるようです。
題材ブック
題材として「Book1.xls」を準備しました。
「Book1.xls」には、「Workbook_Open」と「Workbook_BeforeClose」イベント発生時に自動実行される下記マクロが設定してあります。
Private Sub Workbook_Open()
MsgBox "自動実行されたマクロ。「Workbook_Open」イベント発生。"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "自動実行されたマクロ。「Workbook_BeforeClose」イベント発生。"
End Sub
「Workbook_Open」と「Workbook_BeforeClose」のマクロ名は、私が考えたものではなく、決まったマクロ名になっています。
- Workbook.Open イベント (Excel) | Microsoft Learn
- https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbook.open
- Workbook.BeforeClose イベント (Excel) | Microsoft Learn
- https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbook.beforeclose
「Book1.xls」を開いた時に「Workbook_Open」イベントが発生して「Private Sub Workbook_Open() ... End Sub」内に記述した MsgBox 関数が実行されます。
「Book1.xls」を閉じる前に「Workbook_BeforeClose」イベントが発生して「Private Sub Workbook_BeforeClose ... End Sub」内に記述した Msgbox 関数が実行されます。
VBE の画面では以下のようになっています。画像をクリックすると元の大きい画像を見る事が出来ます。
補足ですが、ワークブックのイベント発生時に実行するマクロを設定する方法です。
- 「ThisWorkbook」をダブルクリックします。(上記画像 1)
- ドロップダウンリストの「(General)」「Workbook」の中から「Workbook」を選択します。(上記画像 2)
- ドロップダウンリストの中からワークブックのイベントを選択します。選択したイベント名の付いた空のマクロが(上記画像 4)のコードペインに自動で入力されます。(上記画像 3)
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub - 実行したいマクロを記述します。(上記画像 4)
マクロの一例
「Book2.xls」に下記のマクロを作成してみました。「Application.EnableEvents = False」でイベントの発生を無効に設定しています。
Sub 自動実行するマクロを無効にしてワークブックを開いて閉じるマクロ()
Application.EnableEvents = False 'イベント発生無効
Dim a As Workbook 'Book1.xls 格納用
Set a = Workbooks.Open(ActiveWorkbook.Path & "\" & "book1.xls") 'Book1.xls を開いて変数 a に代入
Debug.Print a.Name 'Book1.xls の名前取得。 Book1.xls が一瞬開いて直ぐに閉じてしまうので、開いたかどうかの確認用です。
a.Close 'Book1.xls を閉じる
Application.EnableEvents = True 'イベント発生を有効に戻す
End Sub
上記マクロを「Book1.xls」は閉じた状態で「Book2.xls」から実行してみると、 VBE のイミディエイトウィンドウに以下の内容が出力されました。
「Book1.xls」は表示されたようですが、 Msgbox 関数は実行されませんでした。
Book1.xls
スラッシュのような文字
上記マクロの中にスラッシュ(/)の鏡像のような文字が含まれていますが、円記号(\)を日本語フォント以外で表示すると、バックスラッシュという表示になる事があるようです。
"\"
バックスラッシュの表示になっている円記号を「メモ帳」などに貼り付けて日本語フォントで表示すると「\」と表示されると思います。
テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
あとがき
マウス、キーボードでワークブックを開く際に、以下の手順でワークブックを開くとマクロが自動実行されないようです。
Step.1
「Shift」キーを押しながら、自動実行されるマクロを含んだワークブックを開きます。以下「Step.2」で「マクロを有効にする」をクリックするまで「Shift」キーは押したままにします。
Step.2
「マクロを有効にする」をクリックします。
「Shift」キーを離します。
Step.3
自動実行されるマクロは実行されませんでした。
参考資料
- Excel 起動時に特定のブックまたはテンプレートを自動的に開く - Microsoft サポート
- https://support.microsoft.com/ja-jp/office/excel-%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%96%E3%83%83%E3%82%AF%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%92%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%E9%96%8B%E3%81%8F-be9cddc1-a148-4cbf-8f3b-779df08957a3
以上、閲覧ありがとうございました。