【Excel VBA】ThisWorkbookとActiveWorkbookの違い

Excel マクロ(VBA)

ActiveWorkbookとすべきところをThisWorkbookとしてしまってたことで、VBAが意図通り動かなかったという経験はありません?今回は違いが分かりにくいThisWorkbookとActiveWorkbookの違いを説明します。

スポンサーリンク

ThisWorkbookとActiveWorkbookの違い

まず結論から言うと、両者の違いは以下の通りです。

ThisWorkbookVBAのコードが保存されているワークブック

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を指定してしまうことになり、思い通りにマクロが動かない原因になってしまうのです。

コメント

タイトルとURLをコピーしました