Excel/VBA: Property Let/Getを使って標準モジュール上でクラスっぽいことができる
以前、Excel/VBAでもオブジェクト指向プログラミングが可能であることを書きました。
ここでは、クラスモジュールを使うことでオブジェクト指向プログラミングが可能となったわけですが、標準モジュール上でもクラスっぽいことが可能になります。(「っぽい」と書いた理由は後述)
VBAでのステートメントはSub, Functionのほかに、Propertyステートメントがあります。これを使うことで「クラスっぽい」ものが作れます。
[ad#top-1]
エディタの設定
まず、標準モジュールを1つ用意して任意の名前にします。この名前はクラス名になります。今回は「ClassA」としました。
この「ClassA」モジュールにPropertyステートメントを書いていきます。
ソースコード
以下が「ClassA」内に記述したソースコードです。
インスタンス変数としてString型の変数t、あとはProperty Letステートメントと、Property Getステートメントの2つです。Letはsetter、Getはgetterの役割を果たします。
Dim t As String Property Let setText(tx As String) t = tx End Property Property Get getText() As String getText = t End Property
使い方
以下が「ClassA」モジュールを利用した例です。
Sub PropertyTest() ClassA.setText = "Test" MsgBox (ClassA.getText) End Sub
このコードはまた別の標準モジュールに書いて下さい。
このマクロを実行すると以下のようなメッセージが現れます。
冒頭で「クラスっぽい」と書いたのは、インスタンス化できないからです。以下のような例は誤りでエラーが出ます。
' 以下は誤り Set obj = New ClassA
インスタンス化できればもっと使い勝手は良くなりますが、まあそれはクラスモジュールでやるとして、標準モジュールでのPropertyステートメントはデータの設定などに手軽に使えると思います。
[ad#ad-1]
スポンサーリンク