属性(Attribute)とは?
VB.netやC#にはクラスの属性(Attribute)というものがあり、IDEエディタ上で設定可能ですが、VBAにも同様に属性(Attribute)と呼ばれる機能があります。
ただし、VBAの属性(Attribute)は通常は表に出てこず、一部の属性を除いては、エクスポートしたファイルを直接編集することでしか設定できないようになっています。
属性(Attribute)の確認
VBEでクラスファイルを右クリックし、ファイルのエクスポートをしたテキストファイル(*.cls)をテキストエディタで開いてみましょう。
先頭から、下記のようになっているはずです。このうち、「Attribute」で始まるものが属性(Attribute)です。
VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "ITest" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False ↓↓↓これより下は、VBEエディタで入力したとおり↓↓↓
属性(Attribute)の種類
属性は次の4種類に分類できます。
- クラス本体に関する属性
- モジュール変数に関する属性
- プロパティ(Property)に関する属性
- メソッド(Procedure/Function)に関する属性
クラス本体に関する属性(Attribute)
クラス本体に関する属性は下記のとおりです。
- VB_Name
- VB_GlobalNameSpace
- VB_Creatable
- VB_PredeclaredId
- VB_Exposed
- VB_Description
VB_Name
クラスの名前です。IDEでの(オブジェクト名)と連動します。
VB_GlobalNameSpace
未使用です。既定でFalseです。変更は無視されます。
VB_Creatable
未使用です。既定でFalseです。変更は無視されます。
VB_PredeclaredId
既定でFalseです。Trueに設定すると、クラスをインスタンス化せずにメソッドを呼び出すことができます。
(C#で言うところのstatic classのようなものです。)
VB_Exposed
IDEの[Instacing]の設定値と連動します。[1 – Private]の場合はFalse、[2 – PublicNotCreatable]の場合はTrueとなります。
VB_Description(隠し属性※1)
クラスの説明文です。オブジェクトブラウザーに反映されます。「※2 説明文中における改行について」も参照のこと
モジュール変数に関する属性(Attribute)
モジュール変数に関する属性は下記のとおりです。
変数の直下に記述します。<変数名>の部分は変数名と全く同じである必要があります。そうでない場合は無視され、属性は削除されます。
- <変数名>.VB_VarDescription
- <変数名>.VB_VarUserMemId
<変数名>.VB_VarDescription(隠し属性※1)
変数の説明文です。オブジェクトブラウザーに反映されます。「※2 説明文中における改行について」も参照のこと
<変数名>.VB_VarUserMemId(隠し属性※1)
0 のみ設定可能です。
設定値 | 意味 |
---|---|
0 | クラスのデフォルトメンバーに指定します。 |
プロパティ(Property)に関する属性(Attiribute)
プロパティに関する属性は下記のとおりです。
プロパティのブロックの中であれば特に位置は問わないようです。また、<プロパティ名>の部分はプロパティ名と無関係、つまり、xxxやhogeなどと書いても問題ないようです。なお、このようにプロパティ名と無関係な名前に設定したソースファイルをインポートし、再びエクスポートしてみると、<プロパティ名>の部分が正しいものに置き換わっていることが確認できます。
- <プロパティ名>.VB_Description
- <プロパティ名>.VB_UserMemId
<プロパティ名>.VB_Description(隠し属性※1)
プロパティの説明文をです。オブジェクトブラウザーに反映されます。「※2 説明文中における改行について」も参照のこと
<プロパティ名>.VB_UserMemId(隠し属性※1)
0 もしくは -4 のみ設定可能です。
設定値 | 意味 |
---|---|
0 | クラスのデフォルトメンバーに指定します。 |
-4 | For Eachループ構造で反復可能な列挙子であることを指し示します。 |
メソッド(Procedure/Functiony)に関する属性(Attiribute)
メソッド(Procedure/Functiony)に関する属性は下記のとおりです。
プロパティに関する属性の、<プロパティ名>の部分が<メソッド名>に変わるだけで、意味としては全く同じです。
また、記載位置もプロパティと同様に、ブロックの中であれば特に位置は問わないようです。
- <メソッド名>.VB_Description
- <メソッド名>.VB_UserMemId
[※1]隠し属性(Attiribute)について
テキストエディタ上で記述してインポートしない限り追加されない属性のことを指しています。
[※2]説明文中における改行について
下記の説明文中に改行を入れるには、「\n」「\r」「\r\n」を使います。また、「\」自体は「\\」とします。なお、「\t」はタブとして認識されず「t」となってしまいます。
- クラスの説明文
- モジュール変数の説明文
- プロパティの説明文
- メソッド(Procedure/Function)の説明文
コメント