プチIT化 PR

【Excel VBA】Workbook_Open()が動かない、実行されないのはなぜ?

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは、今回の記事はExcelのVBAでWorkbook_Open()の処理が実行されないのはなぜ?という記事になります。

とある日、Excelファイルが開いたときに処理が実行されないような動きになってしまいました。VBAマクロの処理自体にミスはないはず…!

悩める人
悩める人
なんでWorkbook_Open()部分が動かないの?!

となったので、色々調べてみました。それでは、いってみましょう!

原因:標準モジュールに記載していたから

Excelファイルを開いたときにWorkbook_Open()部分の処理が動かなかったのは、標準モジュールにWorkbook_Open()プロシージャーを記入していたからでした。

具体例で言うと、以下のマクロを標準モジュールに追加していました。Excelファイルを開いたときに、表示倍率を100%に整える処理を想定していました。

Private Sub Workbook_Open()
  ActiveWindows.Zoom = 100
End Sub

ですが、Workbook_Open()プロシージャーは、ThisWorkbookに記述しなければならなかったのです。違う場所に記入していたので、上手く動かなかったようです。

対処:ThisWorkbookに記載する

対処としては、標準モジュールに追加するのではなくて、ThisWorkbookにWorkbook_Open()プロシージャーを記述することで無事に処理がはしりました。

標準モジュール内に、ブックを開いた際の処理を記入するには、Auto_Open()プロシージャーとして記述すればOKです。

余談:標準モジュールとThisWorkbookの違い

悩める人
悩める人
どちらもマクロを記述できるけど、何が違うんだろう…

と思ったので、少し調べてみました。(※ざっくりとした説明です。)

標準モジュールとThisWorkbookの違いは、今回のように起動条件や用途が違うようでした。今回のように記述する箇所が違えば動かないことありますね。そして、用途については標準モジュールはブック内から呼び出せる共通的な処理を書き、ThisWorkbookは特定のブックに対して行いたい処理を書くようでした。

さいごに

いかがだったでしょうか!同じような状況に陥った方の参考になれば幸いです。それでは、また次の記事でお会いしましょう!