3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【VBA】ActiveWorkBookは抽象的な参照で危険

Last updated at Posted at 2020-09-17

#はじめに#
ExcelVBAを書くとき、ActiveWorkBookを多用されているのをよく見かけます。
しかし、マクロ実行中に別のExcelブックを開らいたことで、そっちに処理を実行されてぶっ壊わされた事は無いでしょうか?
マクロ実行中は、別のExcelブックを開かないようにアナウンスされたりしますが、処理が長かったりすると使う人は、不便を感じており、根本的な問題が解決していません
時々、お客様から何とかならないかという相談を受けます。

そんなときは、ThisWorkBookに置き換える事で、解消できます。
そうすることで、マクロを実行しているExcelブックにだけ、マクロの処理が実行されます。

筆者はActiveWorkBookは使いません。
ググると例がActiveWorkBook.ホゲホゲで書いてあるものが多数派であるせいもあるのかなぁ・・。

#ActiveWorkBookってなあに?#

ActiveWorkBookとは、現在表示しているExcelブックのことです。抽象的な参照方法のため、マクロ実行中に別のExcelブックを開くと、そちらが現在表示しているExcelブックになってしまいます。

#ActiveWorkBookとThisWorkBookの違い#

ActiveWorkBook:現在表示しているExcelブック(という抽象的な参照方法)
ThisWorkBook :マクロを実行しているExcelブック(という限定的な参照方法)

#置き換えても大丈夫?#
ActiveWorkBookThisWorkBookに置き換えても大丈夫かという事ですが、
どちらもWorkbookクラスの派生なのでWorkbookでできる事は、継承しているので大丈夫です。
※細かいところで固有メソッドがあるかも知れませんが、今のところそういうのに当たった事はありません。

#まとめ#
ThisWorkBookを使った方が安全ですよって話でした。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?