空の文字列と言っても…
VBAの(可変長)文字列は、ちょっとばかしオブジェクト変数と似たところがあります。
いや、Variantの方が近いかな?
普段は全然そんなこと意識しませんけどね。
という訳で?、今日の日記のネタは、StrPtr関数です。
# どういう訳でだよ!ってツッコミは却下です。
ちなみに StrPtr関数は文字列のメモリ上のアドレスを得るための関数です。
まずは、軽く実験をば。
Sub Test() Dim wkText As String Debug.Print Len(wkText), StrPtr(wkText) wkText = "" Debug.Print Len(wkText), StrPtr(wkText) wkText = vbNullString Debug.Print Len(wkText), StrPtr(wkText) End Sub
なかなか興味深い結果になったと思います。
String型変数の初期値は単なる""ではないんですね。
そして、""と vbNullString は違うものだということもこれで分かります。
分かっている人は、「長さ0の文字列」,「値0の文字列」なんて表現を分けるようです。
そして、本当に初期値にしたいなら vbNullString を使うべきだということも分かります。
ま、わざわざString型変数を初期値にする人ってあんまりいないと思いますけどね。
かといって、こんなん知ってても全然意味ないじゃん!ってこともないです。
こんなときに使えます。
Sub TestInputBox() Dim Re As String Re = InputBox("何も入力せずにOKするか" & vbCrLf _ & "キャンセルしてみてください") If StrPtr(Re) = 0 Then MsgBox "キャンセルしましたね" ElseIf Re = "" Then MsgBox "何も入れずにOKしましたね" Else MsgBox "何か入れてOKしましたね" End If End Sub
おまけ・・・
StrPtr は、VBAライブラリの _HiddenModuleクラスの関数です。
このクラスには、他にも
ObjPtr VarPtr
ってのがあります。
私は、この2つが使われているところを見たことがないのですが…
※.Excel World の 2007年3月8日 01:18 の日記をコピーしています。
http://excel.sns.fc2.com/excel/