標準モジュールでの定数定義はそう難しくない。標準モジュールの上部で、例えば
◆標準モジュール Module1 |
Public Const C_VAL As Integer = 5 |
などと書けば、そのプロジェクト内では C_VAL は 5 という定数として使える。
クラスモジュールではどうだろうか?
◆Classモジュール Class1 |
Public Const C_TAX_RATE As Integer = 5 |
などと書いて実行してみようものならエラーが出る。
クラスモジュール内でPublicの定数は定義できないのだ。
やり方を紹介する前に、「なんでクラスモジュールで定数なんか定義するの?」と思われるだろう。ごもっとも。
簡単なところでは、定数の種類によってクラスを分けておけば、どういう値を扱っているのか分かりやすい、というメリットがある。例は悪いが「データベース関係の定数」「ネットワークアクセス関連の定数」「固定のユーザーID/パスワードの定数」などと分けられる。
もう少し面白い使い方もできるのだが、っとクラスモジュールに馴染んでからでないと難しい部分があるので、先々出そうと思う。
さて、やり方は二つある。
※現在、記憶に頼って書いています。動作検証していません。
【その1】
◆Classモジュール Class2 |
Public Function TAX_RATE() As Integer TAX_RATE = 5 End Function |
とすれば、そのクラスのGetVal を呼び出せば 5 が返る。
【その2】
◆Classモジュール Class3 |
Private Const C_TAX_RATE As Integer = 5 Public Property Get TAX_RATE() As Integer TAX_RATE = C_TAX_RATE End Function |
これでそのクラスの TAX_RATE を呼び出せば 5 が返る。
どちらを使ってもいいのだが、私としては後者で Property Get に馴染んでおいていただくことをお勧めする。
この先、Property Set/Let を紹介するのだが、そのときには必須であるし、何よりも関数内に固定値を入れると、経験上メンテナンス性は下がるようであるからだ。
Property Get はなかなかいい手本がないようである。ここ、難しいようならもう少し噛み砕いて書こうと思う。メールなどで意見をいただけるとありがたい。
※最近、コメントがあると通知されるようになったので、コメントでもいいです。
※書き直し /八月末削除予定 /クラス