ThisWorkbookに関するツイートを見かけ、拙著についても補足が必要だと感じたので記事を書いておきます。
初学者に向けて、細かな厳密な内容を一旦脇に置いて、基本的な原則をざっくりと伝えるのが、入門書の大きな役割です。
Excel VBAの入門書である拙著『いちばんやさしいExcel VBAの教本』も、もちろんこれを強く意識して書きました。
そのため、本文ではとりあえずの(厳密には間違っている)説明を書いて、コラム等で補足している箇所がいくつもあります。
実は、補足の解説をしていない、厳密には違っているケースもある内容を書いていますので、ここで補足しておきます。
この記事は主にExcel VBAの経験がある方に向けたものですから、拙著で初めてプログラミングを学習したという方は、以下に書いている内容を当面忘れてしまっても構いません。
ThisWorkbookは多くの場合オブジェクト名
ThisWorkbookについてです。
Lesson 74「ブックを表すオブジェクトを取得するプロパティについて学習しましょう」では、ThisWorkbookをプロパティとして解説していますが、実は多くの場合ThisWorkbookはオブジェクトの名前です(ThisWorkbookがプロパティのケースもあります)。
書かれているコードについてヒントを表示するためのショートカットキー[Ctrl]+[I]を使うと、ThisWorkbookがオブジェクトと解釈されていることを確認できます。
コード内の「ThisWorkbook」にカーソルを置いて[Ctrl]+[I]を押すと、
上図のとおり、
Class ThisWorkbook
とThisWorkbookが、オブジェクトと解釈されているヒントが表示されます。
VBEがThisWorkbookをプロパティと解釈した場合には、下図のように
ThisWorkbook As Workbook
とヒント表示されます。
実行時にはコードの書かれているオブジェクトを取得するので同じ
ただし、コードが実行された段階では「ThisWorkbook」は、いずれにしても、コードの書かれているブックを表すWorkbook型のオブジェクトを返します。
ですから(特に初学者の場合)、「ThisWorkbook」がオブジェクト名かどうかは、意識しなくて構いません。「ThisWorkbook」をプロパティと理解していても問題になることは、まず無いはずです。
そのため拙著内では補足コラムも書かずに済ませました。
オブジェクト名が変更されているときにはプロパティと解釈される
先ほど提示した、
という画像は、合成などをして作ったわけではありません。
デフォルトで「ThisWorkbook」となっている、コードの書かれているブックの名前を変更した場合、ThisWorkbookがプロパティと解釈され「ThisWorkbook As Workbook」がヒントとして表示されるようになります。
上図はVBEのプロパティウィンドウから「ThisWorkbook」を「MYBOOK」にした状態です。
ThisWorkbookという名前のオブジェクトがみつかればThisWorkbookと解釈されヒントが表示されますが、みつからない場合には、ExcelライブラリのThisWorkbookプロパティと解釈されたヒントになります。
ライブラリ名から書いてみよう
このあたりをもう少し突っ込んで考えたい方は、ライブラリ名からコードを書いてみましょう。
Excelライブラリから以下のようなコード書いてヒントを表示すると
MsgBox Excel.ThisWorkbook.Name
ThisWorkbookのヒントは、
ThisWorkbook As Workbook
と表示されます。
一方、デフォルトの「ThisWorkbook」のままで、
MsgBox VBAProject.ThisWorkbook.Name
のようなコードを書いた場合ThisWorkbookのヒントは、
Class ThisWorkbook
と表示されます。
最終更新日時:2020-11-25 17:17
- Newer:VBAで最後尾のシートからVlookup
- Older:10の位以下を切り捨てる-ROUNDDOWN関数
Home » いちばんやさしいExcel VBAの教本 » ThisWorkbookとはプロパティなのかオブジェクト名なのか