VBAのヘルプに、残念なサンプルコードが掲載されていることに気付きました。
何故か以下のようなコードがサンプルとして掲載されています。
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")
CreateObjectのヘルプに最初に掲載するならCreateObject("Excel.Application")
上述のサンプルコードは動きますけれど、CreateObject関数のヘルプで、最初に掲載するのが相応しいサンプルだとは思えません。
最初に紹介するならトリッキーな、
CreateObject("Excel.Sheet")
ではなく、
CreateObject("Excel.Application")
でしょう。
しかも、
CreateObject("Excel.Sheet")
の戻り値を代入する変数の名前が「ExcelSheet」になっています。CreateObject関数に慣れていない方、Excelのオブジェクトモデルを理解できていない方が、
Set ExcelSheet = CreateObject("Excel.Sheet")
というコードを見ると、CreateObject("Excel.Sheet")の戻り値は、Worksheetオブジェクトかな、と誤解してしまう可能性がかなり高いだろうと感じます。
CreateObject("Excel.Sheet")の戻り値がWorkbookであることを確認するサンプルマクロ
CreateObject("Excel.Sheet")の戻り値は、Worksheetオブジェクトではありません。Workbookオブジェクトです。
以下のSubプロシージャで確認しましょう。
Dim obj As Object
Set obj = CreateObject("Excel.Sheet")
obj.Application.Visible = True
Stop
MsgBox TypeName(obj)
End Sub
このSubプロシージャは、Excelのインストールされている環境なら、Word VBAでもPowerPoint VBAでも動きます。
上記のSubプロシージャを実行すると、Excelが起動してStopステートメントで中断モードになります。
拙著『いちばんやさしいExcel VBAの教本』でも多用している、ローカルウィンドウでオブジェクト変数objを確認しましょう。
VBEのメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すると、下図のとおり[型]欄に「Object/Workbook」と表示されています。
この表示は、
Dim obj As Object
と宣言されているので、Object型でメモリを用意したけど、実際に代入してみたらWorkbookオブジェクト型だったことを示しています。
[F5]キーで再度実行すると、
MsgBox TypeName(obj)
が実行されて、「Workbook」と表示されたメッセージボックスが表示されます。
CreateObject("Excel.Sheet")より、まずCreateObject("Excel.Application")でしょう
CreateObject("Excel.Sheet")というコードを使うと、CreateObject("Excel.Application")から、Excel.Applicationのインスタンスを生成するよりも、短いコードでExcelのワークシートを扱えるようになります。
でもそれは、CreateObject("Excel.Application")を熟知してからだろうと強く感じます。
最終更新日時:2021-04-14 13:00
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » CreateObject("Excel.Sheet")の戻り値はWorkbook