#はじめに#
ExcelVBAを書くとき、ActiveWorkBook
を多用されているのをよく見かけます。
しかし、マクロ実行中に別のExcelブックを開らいたことで、そっちに処理を実行されてぶっ壊わされた事は無いでしょうか?
マクロ実行中は、別のExcelブックを開かないようにアナウンスされたりしますが、処理が長かったりすると使う人は、不便を感じており、根本的な問題が解決していません
。
時々、お客様から何とかならないかという相談を受けます。
そんなときは、ThisWorkBook
に置き換える事で、解消できます。
そうすることで、マクロを実行しているExcelブック
にだけ、マクロの処理が実行されます。
筆者はActiveWorkBookは使いません。
ググると例がActiveWorkBook.ホゲホゲ
で書いてあるものが多数派であるせいもあるのかなぁ・・。
#ActiveWorkBookってなあに?#
ActiveWorkBookとは、現在表示しているExcelブック
のことです。抽象的な参照方法
のため、マクロ実行中に別のExcelブックを開くと、そちらが現在表示しているExcelブック
になってしまいます。
#ActiveWorkBookとThisWorkBookの違い#
ActiveWorkBook:現在表示しているExcelブック(という抽象的な参照方法)
ThisWorkBook :マクロを実行しているExcelブック(という限定的な参照方法)
#置き換えても大丈夫?#
ActiveWorkBook
をThisWorkBook
に置き換えても大丈夫かという事ですが、
どちらもWorkbookクラスの派生なのでWorkbookでできる事は、継承しているので大丈夫です。
※細かいところで固有メソッドがあるかも知れませんが、今のところそういうのに当たった事はありません。
#まとめ#
ThisWorkBook
を使った方が安全ですよって話でした。