「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オブジェクトの可能性もあるわけで……。
結局、結論は同じ(「それじゃダメじゃん」)ですね。(^^;)
2008年12月01日
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/23660276
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/23660276
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック