2009年02月18日

Worksheetsコレクション

前記事で、「Worksheetsコレクションなどというものは実在しているのでしょうか?」と書きましたが、とりあえずオブジェクトブラウザにはクラスとして表示されます。
ただし、そのメンバ(プロパティやメソッド)は、Sheetsコレクションとまったく同じであり、Worksheetsコレクションならでは、という機能はありません。

また、VBAヘルプにも、Worksheetsコレクション(Excel 2007では「Worksheetsオブジェクト」という表記ですが)の項目はあります。
「使用例」のところには、「Worksheets コレクションを取得するには、Worksheets プロパティを使用します」とあります。

シート全般ではなく、ワークシートだけの集合を取得できるプロパティやメソッドというのはWorksheets以外にはなさそうなので、前記事では「Worksheetsコレクションの場合、Worksheetsプロパティ以外には取得する方法がないような気もします」と書きました。
(Itemに引数として配列を指定する、というケースも含めて)

ただ、このようにして取得されたWorksheetsコレクション(のはずのもの)をTypeName関数で調べると、「Sheets」が返ってきます。
また、VBAヘルプの「Application.Worksheets プロパティ」の項目には、ここでも書いた通り、「Application オブジェクトでは、作業中のブックのすべてのワークシートを表す Sheets コレクションを返します」と書かれています。

これに関連して、特に問題だと思うのが次のようなケース

Dim w As Worksheets
Set w = Worksheets

念のために書いておきますが、1行目の「Worksheets」はオブジェクト(コレクション)の型、2行目の「Worksheets」はプロパティです。

このコードを実行すると、「型が一致しません」(え?)というエラーになってしまいます。(^^;)
このケースでは、変数wを「As Sheets」で宣言すれば通ります。

つまり、「Worksheets」というオブジェクト型(クラス)自体は用意されているものの、それが実際にオブジェクトとして出現することはないのではないか、ということです。
ワークシートだけのSheetsコレクションをWorksheetsコレクションだと言い張ることはできる(?)かもしれませんが、そうなるともう、実体のない単なる「概念上のオブジェクト」のような気もしてきます。
posted by 土屋和人 at 08:56| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/26881047
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック