2008年12月01日

Excel4マクロシート

「Excel 4.0マクロ」についてはまた改めて書くとして、今回は「Excel4マクロシート」限定の話です。

Excel4マクロシートはショートカットキー(Ctrl+F11)でも挿入できますが、VBAのコードで作成したい場合は、たとえば次のようにします。

Sheets.Add Type:=xlExcel4MacroSheet

ここではSheetsコレクションを対象としていますが、Worksheetsコレクションを対象としてマクロシートを作成することもできます。
ちなみに、グラフシートの場合もSheetsコレクションのAddメソッドで作成することができます(Type:=xlChart)が、Worksheetsコレクションではさすがに無理のようです。

VBA的には、ダイアログシートが「DialogSheet」という専用のオブジェクトを用意されているのに対し、マクロシートはあくまで「Worksheet」の一種、という扱いのようです。
たとえば、マクロシートがアクティブな状態で、VBEのイミディエイトウィンドウに「?typename(activesheet)」と入力してEnterすると、「Worksheet」という文字列が返ります。

それならWorksheetsコレクションにも含まれているのだろう……と思うのですが、実はそういうわけではありません。
「Worksheets.Count」としてもマクロシートの分はカウントされませんし、「Worksheets("Macro1")」のように指定してもマクロシートを表すWorksheetオブジェクトは取得できません。

マクロシートを取得したい場合は、Sheetsコレクションを使用して、たとえば「Sheets("Macro1")」のようにします。
で、こうして取得されたオブジェクトはやはりWorksheetオブジェクトという……なんだかよくわかりませんが。(^^;)

もしTypeプロパティに使い道があるとしたら、コード中でこのマクロシートとワークシートを区別したい場合、ぐらいでしょうか?
とはいえ、「For Each s In Worksheets」のような場合はもともとマクロシートは除外されてるし、「For Each s In Sheets」や「ActiveSheet」の場合はChartオブジェクトの可能性もあるわけで……。
結局、結論は同じ(「それじゃダメじゃん」)ですね。(^^;)
posted by 土屋和人 at 09:01| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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