t-hom’s diary

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

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

VBAのNowは、結論から言えば、MSDNに関数と表記があるので、関数と呼んで良いのだろう。

文字列と日付の操作:VBAのヒントとコツ

VBA では、現在の日付や時刻を正確に調べるための関数として Now、Date、Time の 3 つの関数が提供されています。Now 関数は、Date 変数のうち日付と時刻の両方の部分を返します。たとえば Now 関数は次のような値を返します。

でも腑に落ちないことがある。
オブジェクトブラウザで確認すると、DateTimeクラスモジュールのプロパティとして定義されているのだ。

f:id:t-hom:20150617232103p:plain

HourやMinuteはDateTimeクラスモジュールのFunctionなので、関数と呼んでもまあ差し支えは無いだろうけど、プロパティを関数と呼ぶのはやや抵抗がある。

それとも、DateTime.NowプロパティとNow関数は別物として定義されているのだろうか。

まあ、たまたま内部的にプロパティとして実装されているだけで、もし設計が違っていたら関数として実装されていてもおかしくは無い。

次のようにラッパー関数Nowを定義しても、何ら変わりなく動作する。
中身がDateTime.Nowなので当たり前であるが。

Sub 現在時刻()
    MsgBox Now
End Sub

Function Now()
    Now = VBA.DateTime.Now
End Function

VBの設計者がメソッド、プロパティ、関数といった用語をどう使い分けているのか謎であるが、とりあえず便宜上は、「Nowは関数である」と言っておいてプログラミングに差し支えはなさそうである。

追記

※DateTimeはクラスだと思っていたらモジュールでした。
thom.hateblo.jp

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