VBAの入力用ダイアログボックス(InputBox関数)について質問です。 Sub 技17_2() Dim ret As String ret = InputBox("値を入力してください")

補足

追加の質問です。 疑問点1. コードの最初の部分を、 If ret = "" Then MsgBox "入力がおかしいです" というコードに書き換えた場合に、キャンセルボタンを押したら、”入力がおかしいです”と表示されるのは、「キャンセルの表示」としてはおかしくないですか?処理結果として何かが変と感じるのは、私がプログラムの初心者だからですか?それとも、だれでも変と思うようなものなのでしょうか? 疑問点2. 今回の話は抜きに、InputBoxを使う普通の処理の時には、キャンセルボタンを押したときに表示される内容は、今回のようにコードの中で書かれるのですか? コードの中で何も書かないと、キャンセルボタンを押したときはエラーになるのでしょうか? 分かりにくい質問かもしれませんがご回答をお願いします。

Visual Basic | Excel90閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

ID非公開

2021/10/22 21:26

ID非公開

2021/10/25 13:45

未入力もキャンセルも、結果は「何も入力していない」と判断されるため、別の判断をしなければなりません。 下記の「Sample3」を参考にしてください。 https://www.moug.net/tech/exvba/0010014.html ただし、 Application.InputBox InputBox は似て非なるものなので どうしてもINPUTBOXで処理したいのであれば、 入力された値の情報をもとに判断するしかありません。 その時は下記のサイトのような判断(数字の場合の例)を個別に種類別に判断させて、最終的に、キャンセルだったのか未入力でOKを押したのかの判別が必要になります。 https://www.relief.jp/docs/excel-vba-inputbox-cancel.html

ThanksImg質問者からのお礼コメント

ありがとうございます。勉強になりました。

お礼日時:10/27 10:16

その他の回答(2件)

0

Microsoftによれば、 - InputBoxの戻り値はVariant型 - 何も入力されずOKボタンを押した時は””(空文字)が、 Cancelボタンを押した時はNull が返る 従って、空文字かNullかを判別すれば、何も入力されずOKボタンを押した場合と、Cancelボタンを押した場合が判別できる。 NullかどうかはStrPtr関数を使えば分かる。 StrPtrは文字列型変数のメモリ番地を返す関数。変数の値がNullの場合は0を返す。 何も入力されずOKボタンを押した時は、StrPtr(ret)はメモリ番地が表示され、 Cancelボタンを押した時は 0が返る。

0

この関数は、何も入力しないでEnteやOk、キャンセルがクリックされたなら、Inputbox関数そのものがキャンセルされた、ということになります。 どのような答えを期待しているか分かりませんが、もう少し戻り値を期待したいなら Application.InputBoxメソッドを使う手もあります。 InputBoxは、関数もメソッドも同じスペルなので紛らわしいですね。

この返信は削除されました