最近の記事
- 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
VB(A) の中でも、不思議な仕様なのが InputBox 関数だ。
この関数は、一行入力のテキストボックスを持つダイアログボックスを表示し、 利用者に適当なテキストの入力を促す。 見た目が質素なので、その用途は微妙だが、 フォームをいちいち作るのが面倒な時に使うこともある。
ダイアログボックスには、OK だけでなくキャンセルボタンもあるので、 利用者はキャンセルを選んで、処理を中止することもできる。 ということは、この関数は入力されたテキストだけでなく、 キャンセルされたかどうかの情報も返さなければならない。
さて、この関数の戻り値は、String 型である。 他の引数には値を呼び出し側に返すものはなく、 エラーを使ってキャンセルを表す感じでもない。 つまり、戻り値のみで対応しないといけないのだ。
どうなっているのか。
マニュアルを読んでみると、以下のようにある。
[OK] ボタンをクリックするか、または Enter キーを押すと、InputBox 関数はテキスト ボックスの内容を返します。 [キャンセル] ボタンをクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。
この説明を信用した場合、大きな欠陥があることが分かる。 利用者がテキストを 1 文字も入力しなかった場合、 「OK」を押したか、「キャンセル」を押したか、戻り値では判断がつかないのだ。
実は、このマニュアルの表記にはミスがあり、 InputBox 関数では、その戻り値だけで、 空文字列の入力とキャンセルを区別する方法があるのである。
そのポイントは、VBA の String 型の特徴にある。
コメント (0 件)