最近の記事
- 9/1 - 将棋始めました
- 5/16 - サーバー引っ越し
- 4/24 - 優先順位
- 3/17 - vbNullString と 空文字列 ""
- 3/15 - InputBox 関数の戻り値
- 3/13 - 紙と Excel と VBA
- 3/9 - 未だに Visual Basic 6
- 11/14 - ぼて閉鎖
- 11/9 - 関数オブジェクトの呼び出し
- 9/7 - メソッドとしての関数オブジェクト
Entering Passive Mode
では、続き。
InputBox 関数のマニュアルのミスとは、キャンセルされた場合に返す値である。
実際には、InputBox 関数でキャンセルすると、長さ 0 の文字列 ("") ではなく、vbNullString が返る。
この、vbNullString は、"" とは異なる値である。
InputBox 関数で OK を押した場合、テキストボックスの内容が戻り値となる。
テキストボックスが空の場合は "" が返るので、キャンセルの vbNullString と区別することができる。
ただ、1 つ大きな問題がある。
vbNullString と "" をどうやって区別すれば良いのか。
vbNullString = "" は TrueStrComp(vbNullString, "") は 0Len(vbNullString) も Len("") は 0困ったことに、VBA の一般的な方法では、上記を区別するのは困難なので、特別な方法を使う必要がある。
それにはいくつかの方法があるが、一番簡単なのが、VBA の隠し関数である、StrPtr 関数の戻り値で判断する方法だ。
StrPtr(vbNullString) は常に 0StrPtr("") は常に 0 以外この関数を利用すれば、以下のようなコードを書けるようになる。
Dim Answer As String
Answer = InputBox("foo")
If StrPtr(Answer) = 0 Then
' キャンセル
Else
' OK
End If
StrPtr は隠し関数なので、標準では入力補完の一覧に出てこないが、 直接入力すれば、問題なく利用することができる。 また、オブジェクトブラウザで、非表示のメンバを表示させれば、 入力補完の一覧に表示されるようになる。
さて、この関数、いったいどういう機能を持つ関数なのだろうか。 名前からして文字列 (Str) のポインタ (Ptr) を返すという感じだが。 これを理解するためには、String 型の構造を知る必要がある。
コメント (1 件)
大変参考になります。
この続きは・・・
勉強したい!