目次

Enable

今回は、自動実行するマクロを含んだワークブックを Workbooks.Open メソッドで開く時に、自動実行するマクロを実行しない方法を試してみました。

「Application」オブジェクトの「EnableEvents」プロパティを使用すると Excel アプリのイベント発生の有効、無効を設定出来るようです。

「EnableEvents」の「Enable」(イネーブル)の英語の意味をインターネットの辞書で調べてみると「有効にする」「可能にする」などの意味があるようです。

対義語は「Disable」(ディスエーブル)のようで「Disable」は「無効にする」などの意味があるようです。

「Application」オブジェクトの「EnableEvents」プロパティを「False」に設定している。
「Application」オブジェクトの「EnableEvents」プロパティを「False」に設定している。

目次まで戻る

題材ブック

題材として「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 関数が実行されます。

「Workbook_Open」イベントが発生して MsgBox 関数が実行されている。
「Workbook_Open」イベントが発生して MsgBox 関数が実行されている。

「Book1.xls」を閉じる前に「Workbook_BeforeClose」イベントが発生して「Private Sub Workbook_BeforeClose ... End Sub」内に記述した Msgbox 関数が実行されます。

「Workbook_BeforeClose」イベントが発生して Msgbox 関数が実行されている。
「Workbook_BeforeClose」イベントが発生して Msgbox 関数が実行されている。

VBE の画面では以下のようになっています。画像をクリックすると元の大きい画像を見る事が出来ます。

VBE (VisualBasicEditor)の画面です。ワークブックオブジェクトに自動実行するマクロを設定しています。
VBE (VisualBasicEditor)の画面です。ワークブックオブジェクトに自動実行するマクロを設定しています。

補足ですが、ワークブックのイベント発生時に実行するマクロを設定する方法です。

  1. 「ThisWorkbook」をダブルクリックします。(上記画像 1)
  2. ドロップダウンリストの「(General)」「Workbook」の中から「Workbook」を選択します。(上記画像 2)
  3. ドロップダウンリストの中からワークブックのイベントを選択します。選択したイベント名の付いた空のマクロが(上記画像 4)のコードペインに自動で入力されます。(上記画像 3)
    Private Sub Workbook_Open()
    End Sub

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    End Sub
  4. 実行したいマクロを記述します。(上記画像 4)

目次まで戻る

マクロの一例

ブック 2 です。
ブック 2 です。

「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

目次まで戻る

スラッシュのような文字

上記マクロの中にスラッシュ(/)の鏡像のような文字が含まれていますが、円記号(\)を日本語フォント以外で表示すると、バックスラッシュという表示になる事があるようです。

"\"

バックスラッシュの表示になっている円記号を「メモ帳」などに貼り付けて日本語フォントで表示すると「\」と表示されると思います。

フォント「MS Pゴシック」で円記号を表示。
フォント「MS Pゴシック」で円記号を表示。
フォント「Verdana」で円記号を表示。
フォント「Verdana」で円記号を表示。

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

目次まで戻る

あとがき

マウス、キーボードでワークブックを開く際に、以下の手順でワークブックを開くとマクロが自動実行されないようです。

Step.1

「Shift」キーを押しながら、自動実行されるマクロを含んだワークブックを開きます。以下「Step.2」で「マクロを有効にする」をクリックするまで「Shift」キーは押したままにします。

Step.2

「マクロを有効にする」をクリックします。

セキュリティ警告のメッセージ。
セキュリティ警告のメッセージ。

「Shift」キーを離します。

Step.3

自動実行されるマクロは実行されませんでした。

自動実行マクロは実行されませんでした。
自動実行マクロは実行されませんでした。

参考資料

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿