ActiveWorkbookとすべきところをThisWorkbookとしてしまってたことで、VBAが意図通り動かなかったという経験はありません?今回は違いが分かりにくいThisWorkbookとActiveWorkbookの違いを説明します。
ThisWorkbookとActiveWorkbookの違い
まず結論から言うと、両者の違いは以下の通りです。
ThisWorkbook:VBAのコードが保存されているワークブック
ActiveWorkbook:現在ユーザーが操作しているワークブック
つまり、VBAが確実に動かしたいワークブックに記述されている場合はThisWorkbookが適切です。例えば、拡張子がxlsmのファイルで、ワークブック内のVBAを参照するマクロのボタンが設置してあるようなケースです。
逆にActiveWorkbookが適切なケースは、VBAのコードがどこに保存されているかを問わずに動かしたい場合です。例えば、あるファイルを開いて、PERSONAL.XLSBに保存されているVBAを実行する場合などがこれにあたります。
違いを可視化
そもそも、ワークブックにVBAが保存されている、というのが分かりにくいと思います。Excelは、通常使っているとワークシート(以下のような行列にセルが並んでいるシート)しかないように見えます。
しかし実際には、1つのExcelファイルは以下のように様々なデータを保有する構造になっていて、VBAのコードもその一部なのです。
ThisWorksheetが不適切なケース
上記を踏まえて、ThisWorkbookが不適切なケースを考えてみましょう。
以下のように、Excelが2つあります。この時、ユーザーが操作しているのはExcel1です。ここでVBAのエディターを開いてコードを保存した時に、意図してか意図せずしてか、Excel2にコードを保存してしまったとします。ファイルを同時に多く扱っていると、こういったケースもよく発生するのです。
すると、今操作しているActiveWorkbookはExcel1ですが、コードが保存されているThisWorkbookはExcel2となり、ユーザーの直感的な理解で”このExcel”という意味で”ThisWokrbook”とすると、実際にはコードが保存されているExcel2を指定してしまうことになり、思い通りにマクロが動かない原因になってしまうのです。
コメント