空の文字列と言っても…

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/