はじめに
Excelブックには「Workbook_Open」イベントという仕組みがあり、ブックを開いたときに自動的にVBAコードを実行できます。 たとえば、起動時に初期設定を行うマクロや、メッセージを表示するマクロなどです。
しかし、次のようなケースでは「Workbook_Openを動かさずにブックを開きたい」ことがあります。
- マクロの動作確認をしたい(起動マクロを一時的にスキップしたい)
- セキュリティの都合で自動処理を止めたい
- 他のVBAコードから開くときに、自動処理を抑制したい
この記事では、Workbook_Openを実行せずにブックを開く方法を紹介します。
方法1:Shiftキーを押しながら手動で開く
最も簡単なのは、「Shiftキーを押しながらブックを開く」方法です。
これはExcel標準の機能で、
「Shiftキーを押したまま開くと、Workbook_OpenやAuto_Openなどの自動マクロを実行しない」
という仕様になっています。
手順
- Shiftキーを押しながら、開きたいブックのアイコンをダブルクリックします。ブックが完全に開くまでShiftキーは離さないでください。
- マクロが実行されない状態でブックが開きます。
この方法は手動操作限定ですが、安全かつ簡単です。
方法2:VBAでイベントを一時的に無効化して開く
VBAから別のブックを開く場合は、Application.EnableEvents プロパティを使うと Workbook_Open イベントを実行させずに開くことができます。
サンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub OpenWithoutEvent() Dim wb As Workbook Dim filePath As String filePath = "C:\Users\user\Documents\Test.xlsm" '開くファイルのパス '// イベントを無効化 Application.EnableEvents = False 'Workbook_Openを実行せずに開く Set wb = Workbooks.Open(filePath) '// 処理が終わったらイベントを戻す Application.EnableEvents = True MsgBox wb.Name & " を開きました(Workbook_Openは実行されていません)" End Sub |
ポイント
Application.EnableEvents = Falseで 全イベントを無効化 します。これによりWorkbook_OpenやSheet_Changeなども実行されません。- 開いたあと、忘れずに
Trueに戻すことをおすすめします。戻し忘れると、以降のイベントも動かなくなります。
方法3:リンク更新や警告を抑制したい場合
イベントを止めるのに加えて、リンク更新や警告も無効化したい場合は、以下のようにします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub OpenSilently() Dim wb As Workbook Dim filePath As String filePath = "C:\Users\user\Documents\Test.xlsm" Application.EnableEvents = False Application.DisplayAlerts = False Application.AskToUpdateLinks = False Set wb = Workbooks.Open(filePath, UpdateLinks:=False) Application.EnableEvents = True Application.DisplayAlerts = True Application.AskToUpdateLinks = True MsgBox wb.Name & " を静かに開きました。" End Sub |
これで、
- Workbook_Openは実行されない
- リンク更新の確認ダイアログも出ない
- 上書き確認などの警告も出ない
という静かな状態でブックを開けます。
まとめ
| 方法 | 特徴 |
|---|---|
| Shiftキーを押して開く | 手動で簡単に止められる |
| Application.EnableEvents = False | VBAから制御できる。確実で汎用的 |
| DisplayAlerts等を併用 | 警告やリンク更新も抑制可能 |
Workbook_Openを止める目的が「一時的にスキップ」なのか「自動化処理の中で抑制」なのかによって、使い分けましょう。
参考:Workbook_Openイベントの定義場所
最後に、Workbook_Openイベントがどこにあるか分からない場合は、「VBE(Visual Basic Editor)」で以下を確認してください。
- Alt + F11 を押してVBEを開く
- プロジェクト内の「ThisWorkbook」をダブルクリック
- コードウィンドウ上部で「Workbook」「Open」を選択
そこに書かれているコードが、自動実行されるマクロです。
今回紹介した方法を使えば、これを一時的に無効化できます。
