では、続き。

InputBox 関数のマニュアルのミスとは、キャンセルされた場合に返す値である。

実際には、InputBox 関数でキャンセルすると、長さ 0 の文字列 ("") ではなく、vbNullString が返る。 この、vbNullString は、"" とは異なる値である。

InputBox 関数で OK を押した場合、テキストボックスの内容が戻り値となる。 テキストボックスが空の場合は "" が返るので、キャンセルの vbNullString と区別することができる。

ただ、1 つ大きな問題がある。 vbNullString"" をどうやって区別すれば良いのか。

困ったことに、VBA の一般的な方法では、上記を区別するのは困難なので、特別な方法を使う必要がある。

それにはいくつかの方法があるが、一番簡単なのが、VBA の隠し関数である、StrPtr 関数の戻り値で判断する方法だ。

この関数を利用すれば、以下のようなコードを書けるようになる。

Dim Answer As String
Answer = InputBox("foo")
If StrPtr(Answer) = 0 Then
    ' キャンセル
Else
    ' OK
End If

StrPtr は隠し関数なので、標準では入力補完の一覧に出てこないが、 直接入力すれば、問題なく利用することができる。 また、オブジェクトブラウザで、非表示のメンバを表示させれば、 入力補完の一覧に表示されるようになる。

さて、この関数、いったいどういう機能を持つ関数なのだろうか。 名前からして文字列 (Str) のポインタ (Ptr) を返すという感じだが。 これを理解するためには、String 型の構造を知る必要がある。