Each)VBAクラスをエクスポートすると各種のAttributeが設定されているのが確認できます。それぞれのAttributeの意味と、さらに追加で指定できるAttributeについて説明します。Attributeの変更はVBA標準でサポートされておらず、その使用については慎重であるべきですが、どのようなものがあるかを知るのは、VBAの深部を知るうえでも役に立つと思います。全てのAttributeが使えるわけではなく、VBAとしての制限があります。※本記事を書くにあたっては以下のページを参考にしています。Tutorialこのページは少々見づらく、また自動翻訳のため意味も分かりづらくなっています。自身の覚え書きの意味も含めて、再検証しつつ制限等を追加解説したものになります。基本的なVBAコードは、上記ページのコードを使っています。VBAクラスのエクスポートとインポートクラスのAttributeは、VBEでは追加・修正できません。・(.cls)をインポートこれにより指定したAttributeがVBAで有効となります。上記のうち、以下はVBAでは指定が無効か変更しないものになります。procName.VB_UserMemId以上について説明します。False既定はFalseとなっています。Trueを指定することで、クラスのグローバルデフォルトインスタンスが作成されます。デフォルトのインスタンスは、クラスの名前を介してアクセスされます。Newキーワードでインスタンスを作成することなく、直接クラス名が使えるようになります。通常クラスを使用するときは、インスタンス変数を作成します。True.clsにこのAttributeを指定しインポートしたクラスは、グローバルインスタンスが作成されます。したがって、インスタンスを作成することなくクラスを使用できるようになります。False既定はFalseとなっています。クラスのインスタンス化特性を制御します。クラスのプロパティInstancingと連動しています。Trueただし、VBAではVB_Createableが無視されるため、クラスのインスタンスを外部から直接作成することはできません。"VBAクラスの説明"オブジェクトエクスプローラで表示されるクラスにテキストの説明を追加します。"クラスの既定のメンバー"オブジェクトエクスプローラで表示されるクラスのメンバーにテキストの説明を追加します。Property※インポート前の.clsItem.VB_DescriptionこのItemは特にメンバー名と一致している必要はありませんが、通常は一致させておいたほうが良いでしょう。Item.VB_Descriptionこの挿入位置は、当該プロシージャー/プロパティの中(直後からEndの前)であればどこでも構いません。注:プロパティではすべてのアクセサメンバー(Get、Let、Set)は同じ説明を使用します。したがって、どのアクセサに指定しても構いません。0モジュールスコープ変数をクラスのデフォルトメンバーに指定します。以上の条件を満たしてください。(この制限の一部は実際にやってみた上での制限で、ドキュメントに見当たらないものもあります。標準モジュールではクラスのインスタンスだけ指定したときcountプロパティが既定となります。clsclsだけの記述で、cls.countが既定メンバーとして動作します。イミディエイトには「123」と出力されます。0クラスのデフォルトメンバーに指定します。この挿入位置は、当該プロシージャー/プロパティの中(直後からEndの前)であればどこでも構いません。procNameの文字列は特に使われていませんので、プロシージャー/プロパティ名と一致している必要はありませんが、通常は一致させておいたほうが良いでしょう。標準モジュールではクラスのインスタンス変数だけを指定したときItemプロパティが既定となります。Subcls(n)は、cls.Item(n)になります。イミディエイトには"$A$2"と出力されます。Eachループ構造でクラスを反復可能にしますこのメンバーが列挙子を生成することをVBAに伝えます。"リストを反復処理する列挙子を取得します。Property※インポート前の.clsまず、既定のメンバーを用意します。0これを指定しています。IUnknownこれを定義します。Collectionの非表示メンバー[_NewEnum]を使っています。Subイミディエイトには、$A$1$B$1$A$2・・・と出力されます。Eachの時点でNewEnumが動いているのが分かります。※プロパティ名NewEnumは別の名称でも構いません、好きな名称にできます。VBAクラスのAttributeの最後に最初にも書きましたが、本記事は自身の覚え書きの意味も含めて書いたものになります。実務において、このような技術を使う事はほとんどありませんが、もし必要になったら、いつでも使えるように用意しておこうという事です。そもそもこのAttributeは、VBから移植されたものですが、VBの時から裏技的なものとなっていましたので、さすがにVBAで使う事に対する良し悪しはあるようにも思います。実際にVBAではずっと使えているものでもあるので、今後もサポーされ続けるものと思われます。通常、このような事をする必要性はないはずですが、もしもの時には、ここを見ればいつでも実装できるように準備しておいたということです。Each)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用トップマクロVBAVBAクラス入門VBAクラスのAttributeについてこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。