2012年9月18日火曜日

Excel 2010:未登録のアドインもカウント

VBAのコードを書いたブックをアドイン形式(.xlam)にする場合があります。
メリットとしてはシートをユーザーが表示できないという点です。.xlsm形式で全てのシートをxlSheetVeryHiddenにするということはできません。また、ウィンドウを非表示にしてもユーザーが再表示できてしまいます。
ただし.xlam形式だとちょっと不便な時もあります。

今、.xlam形式と.xlsm形式のファイルを1つずつ開いているとします。


ここで以下のようなコードを実行するとxlsmの方だけが捕捉されます。

Dim wb As Workbook
    For Each wb In Application.Workbooks
        Debug.Print wb.Name
    Next


Workbooks.Countは1です。.xlamもWorkbooksで直接名前を指定すると捕まえられるので、いまいち腑に落ちないんですが。


WorkbooksがダメならAddinsかと思うと、こちらは登録されているアドインだけが対象です。ただ開いただけの.xlamは無視されてしまいます。Addins.Countは5です。

Dim A As AddIn
    For Each A In Application.AddIns
        Debug.Print A.Name
    Next



最近になって気づいたのですが、いつの間にかAddins2というコレクションがありました。どうも2010で追加されていたようです。

<参考>New Objects, Collections, and Enumerations_Excel.Dev - MSDN

これだと未登録の.xlamでも開いていれば対象にするらしい。

Dim A As AddIn
    For Each A In Application.AddIns2
        Debug.Print A.Name
    Next


Addins2.Countは6でした。

2003では拡張子の区別がなく、.xlsのままIsAddinをTrueにするなんてこともやりました(いい使い方ではないと思います)。その時に、このFor EachやCountで困ったことがありました。2003でこれがあったら助かったんですけど。
それにしてもこういうのが新たに追加されたということは、.xlamを普通のブックのようにただ開かせるという使い方もけっこうあるんですかね。

0 件のコメント:

コメントを投稿