t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA Now関数は実はFunctionではなくPropertyとして定義されている その2

先ほど以下の記事を投稿したばかりであるが、ひとつ勘違いが判明したので訂正記事。
thom.hateblo.jp


Now()はDateTimeクラスのプロパティと書いたが、そもそもDateTimeはクラスではなくてただのモジュールだったようだ。

「オブジェクトブラウザ」は、その名のとおりオブジェクトを閲覧するものだと勘違いしていた。

以下のようにDateTime型として宣言しようとすると、コンパイルエラーとなる。

    Dim x As VBA.DateTime


もう一度オブジェクトブラウザを確認すると、確かに左ペーンのヘッダはクラスと記載されているが、中身はModuleである。
f:id:t-hom:20150618001100p:plain

従って、少なくともFunctionはクラスのメソッドではなく、ただの関数と考えてよさそうだ。
そして、VBAライブラリの設計全般として、引数を取らず戻り値を返すものは、Functionではなく、プロパティとして実装されているようだ。

ちなみに、標準モジュールにも以下のようにプロパティを実装できる。

Sub テスト()
    MsgBox 作業フォルダ
End Sub

Property Get 作業フォルダ() As String
    作業フォルダ = "C:\"
End Property

引数無しのFunctionが作成できるように、引数付きのPropertyというのも作成することが出来るが、VBAライブラリでは設計上きちっと役割を分けているということだろう。

ひとつ勉強になった。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。