Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » CreateObject("Excel.Sheet")の戻り値はWorkbook

CreateObject("Excel.Sheet")の戻り値はWorkbook

VBAのヘルプに、残念なサンプルコードが掲載されていることに気付きました。

CreateObject関数のヘルプです。

何故か以下のようなコードがサンプルとして掲載されています。

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プロシージャで確認しましょう。

Sub CreateObjectの戻り値を確認する()
 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

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.