2023/03/25

Notes - Excel 連携:#2)ブックとシート

前回は、ノーツから Excel に接続する方法についてまとめました。

実際に Excel とデータ連携するとなると、Excel のワークシートに対して入出力することになります。そこで、連携したデータを記録する基本となるオブジェクトであるワークシートの取り扱いについてまとめます。


まずはサンプル

以下のコードをエージェントに記述して実行すると、Excel のオブジェクトを新規作成した後、新しいワークブックを開き、最初のワークシートの名前をメッセージボックスで表示します。

Sub Initialize
   Dim oXls As Variant
   Dim oSheet As Variant
  
   Set oXls = CreateObject("Excel.Application")
   Call oXls.Workbooks.Add
   Set oSheet = oXls.Workbooks(1).WorkSheets(1)
   
   oXls.Visible = True
   MsgBox oSheet.Name, 64
End Sub

これを題材に、Excel のワークシートにアクセスするまでの方法を確認しましょう。


Workbooks オブジェクトのふるまい

LotusScript に慣れ親しんだ方からすると、Workbooks オブジェクトのふるまいに違和感を感じませんか?

オブジェクトとして、Add メソッドをコールした後、配列のように添え字をつけてアクセスもしています。

前回紹介した Microsoft Learn で、Application オブジェクトの Workbooks プロパティを調べてみました。

Application.Workbooks プロパティ (Excel)

どうやら、このオブジェクトはコレクションのようです。続いて、このプロパティで取得できる Workbooks オブジェクトです。

Workbooks オブジェクト (Excel)

メソッドを確認すると、使用した Add メソッドが存在します。また、コレクションぽく Count プロパティの存在が確認できます。

ただ、配列のようにアクセスし、コレクションの1要素である Workbook オブジェクトが取得できるとは、どこにも記載されていません。唯一、近しいプロパティとして、Item というのがありました。引数にインデックス番号を指定すると単一のオブジェクトが取得できるようです。

Workbooks.Item プロパティ (Excel)

LotusScript の NotesDocument クラスの拡張構文で、フィールドにプロパティとしてアクセスできるような特殊な機能で実現されていると、勝手に解釈しました。

GetNthWorkbook のようなメソッドがあると、LotusScript 屋にはわかりやすいのですが...


ワークシートにアクセスする経路

一部勝手な解釈は含みつつ、Application オブジェクトからシートオブジェクトを取得するまでで使用するオブジェクトを整理してみました。反転部分がクラス名で、太枠の上段がプロパティ、下段がメソッドです。


Application クラスでは、Workbooks プロパティでコレクションにアクセス、Workbooks(n) で配列のようにアクセスし、Workbook オブジェクトが取得できることを表してみました。

Workbooks オブジェクトの Add メソッドは新規のワークブックを作成、Open が既存のワークブック(Excel ファイル)を開くメソッドです。Close はヘルプによると、すべてのワークブックを閉じるようです。

Workbook オブジェクトは、1つのワークブックを表すオブジェクトなので、保存(Save)や名前を付けて保存(SaveAs)メソッドが存在し、このブックだけを閉じることができます(Close メソッド)。

そして、Workbook オブジェクトにワークシートにアクセスするためのプロパティが存在します。ワークシートもワークブックと同様の構成で、コレクションである Worksheets オブジェクトが存在し、配列的なアクセスで単一のシートを表す Worksheet オブジェクトを取得できます。

Worksheet オブジェクトでは、シート名を表す Name プロパティや シートを表示/非表示するための Visible プロパティが存在します。

最初に記述したサンプルでは、

   Set oSheet = oXls.Workbooks(1).WorkSheets(1)

となっており、一気にワークシートオブジェクトを取得し、oSheet 変数に代入していました。

ここに記載した範囲のプロパティやメソッドで、複数のワークシートがあっても、構造の理解に困ることはないかと思います。

前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿