ThisWorkBookとActiveWorkBookの違い
VBAでブックを参照する際に、「現在利用中のブック」を参照したいことがあります。そのときに、ThisWorkBookとActiveWorkBookのどちらを使えばよいか分からないことがあります。
簡単に整理すると、ThisWorkBookは、VBAコードが記述されているブックのことを指します。ActiveWorkBookは、現在表示されているブックのことを指します。
どちらもWorkBookオブジェクトです。
ThisWorkBook
上記の通り、ThisWorkBookは、VBAコードが記述されているブックのことを指します。
マクロを保存するブックには大きく3種類あります。Excelマクロ有効ブック(*.xlsm、*.xls)と、アドイン(*.xlam、*.xla)と、個人用マクロブック(personal.xlsb)です。これら3種類にもThisWorkBookは含まれており、ThisWorkBookが指すものは、それぞれのブックやアドインになります。用途としては今処理中のコードのブックはどれか、ということを取得したい場合に利用します。
補足ですが、個人用マクロブック(personal.xlsb)はタスクバーには表示されませんが内部的には別ブックとして開かれています。あまり気にする必要はありませんが、例えばExcel起動時にBook1という新規ページが開いた状態でタスクバーに1つしか無いように見えていても、個人用マクロブックがあれば2つのブックが開いていることになります。
ActiveWorkBook
上記の通り、ActiveWorkBookは、現在表示されているブックのことを指します。例えば、Book1.xlsx、Book2.xlsx、Book3.xlsxの3ファイルを開いている場合に、Book3.xlsxを現在表示しているとします。その場合のActiveWorkBookはBook3.xlsxになります。
なお、ブックを開いていない場合やサブウィンドウが開いている場合はNothingになります。
通常はActiveWorkBookを使う
セルの参照などを行うようなExcelに閉じた処理を行う場合には、ActiveWorkBookを推奨します。その理由は、処理を行う対象のExcelブックと、マクロが保存されているブックが同じとは限らないためです。個人用マクロブックを利用している場合などがそうです。
VBAコードを保存しているブックがどれかを知りたい場合のみThisWorkBookを利用し、それ以外は全てActiveWorkBookを利用すると覚えておいても支障ありません。
使用例
1 2 3 4 5 6 7 8 9 10 11 |
Sub test() Dim wb As Workbook '// ThisWorkBook Set wb = ThisWorkbook Debug.Print wb.FullName '// ActiveWorkBook Set wb = ActiveWorkbook Debug.Print wb.FullName End Sub |
VBAコードが書いてあるブック名が先に表示され、次に現在表示されているブック名が表示されます。