標準モジュールでの変数定義はそう難しくない。標準モジュールの上部で、例えば

◆標準モジュール Module1

Public giVal As Integer = 5



などと書けば、そのプロジェクト内では共通で利用できる。



クラスモジュールではどうだろうか?

◆Classモジュール Class1

Public giVal As Integer



などと書いても、生成さえすれば使える。


なら、「差はないのでは?」と思われるだろう。ごもっともである。

ここまでだと、修飾子が付くかどうか、くらいのメリットくらいしかない。


これでもいいのだが、以下に等価の処理であるが別の記述方法を記載しておく。

※現在、記憶に頼って書いています。動作検証していません。


◆Classモジュール Class2

Private iVal As Integer


Public Property Get giVal() As Integer
  giVal = iVal

End Function

Public Property Let giVal(iParm As Integer)
  iVal = iParm

End Function


と記載することもできる。


冗長だなあ、という印象を受けられる方もいらっしゃるだろう。


しかし、先々のため、このやり方も覚えておいて欲しい。

先々、どんなことを紹介するつもりで居るかというと、

・データを保管するための専用のクラスの作成

  →データベースやフォームとデータを授受する際のクラス。Javaなどではデータクラスという呼称でよく使われます(ちょっと知識が古いので、最近流れが変わってきているならごめんなさい)。

  →併せてデータのチェックなども組み込むことも可能です。

・オリジナルのデータ型の作成

  リスト型やn次元テーブルも、生成ができるクラスファイルであるがゆえに柔軟に対応できます。

などである。




※書き直し /八月末削除予定 /クラス

標準モジュールでの定数定義はそう難しくない。標準モジュールの上部で、例えば

◆標準モジュール 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 はなかなかいい手本がないようである。ここ、難しいようならもう少し噛み砕いて書こうと思う。メールなどで意見をいただけるとありがたい。

※最近、コメントがあると通知されるようになったので、コメントでもいいです。



※書き直し /八月末削除予定 /クラス

http://ameblo.jp/tech-note/entry-10013618916.html

この記事で「拡張子をZIPにすれば」というような話を書いた。

 

2007形式のExcelを送付したら、ウィルスチェックソフトによっては「圧縮ファイル数が多くウィルスチェックができなかった」旨のメッセージが出ることがある。

もしかするとウィルス対策ソフト側の設定次第で問題は解決するのかも知れないが、そうでなければウィルス対策ソフト側での対応が迫られそうだ。