電子書籍の厳選無料作品が豊富!

VBAの勉強中です。
教えてください。

INPUTBOX関数で、何も入力しないでの入力も可、とするコードはどうなるでしょうか。
言葉を変えて言えば、入力ボックスが未入力の状態でOKボタンを押すということです。

例えば以下のようにすると、当然ながら「キャンセル」と判断されます。

Sub Test()
 Dim myData As String
 myData = InputBox("入力してください")
  If myData = "" Then
    MsgBox "キャンセル"
  Else
    MsgBox "入力OK"
  End If
End Sub


■■尚、今回は、メソッドではなくて関数での質問になりますのでその点よろしくお願いします。
 

A 回答 (3件)

こんばんは。



>尚、今回は、メソッドではなくて関数での質問になりますのでその点よろしくお願いします。

なぜ、InputBox関数という勧められていない方法を使わなくてはならないのか、レガシーな機能をあえて使う場合は自分で研究すべきです。重箱の隅をつつくような方法を、知っている人は少ないし、いつ、その方法がなくなるのかわかりません。

一応、VBAなどの暗黙のルールには、なるべくレガシーな方法は避けるべきだとしていますから、InputBox メソッドを使うべきですね。
Type:=2 にして、戻り値をVariant で受けると、Boolean値と、空文字(長さ0文字列)の区別がつきます。

ただ、旧VBのテクニックには、こういう古い方法が残されています。
「VB.Net 使ウベカラズ」のリストの中に出てきます。

Sub Test1()
 Dim myData As Variant 'Stringでも可能
 myData = InputBox("入力してください")
  If StrPtr(myData) = 0 Then
    MsgBox "キャンセル"
  Else
    MsgBox "入力OK"
  End If
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

StrPtr、そんなものがありましたか。
オブジェクトブラウザでみましたところ、HiddenModuleのメンバーになってますね。
知らないはずです。
またひとつ勉強になりました。
 
>なぜ、InputBox関数という勧められていない方法を使わなくてはならないのか

あくまでも勉強の一環ということで。。。

これからもよろしくお願いいたします。
 

お礼日時:2008/11/11 21:18

入力ボックスが未入力状態の場合、[OK][キャンセル]どちらのボタンを


押したかの判断は、INPUTBOX関数では出来なかったはずです。
(ですので私はINPUTBOX関数は使わず、フォームにしています)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはりふつーの方法ではないようですね。
このような場合には仰るようにUserFormなどを使うのが妥当だと思いますが、
今回はあくまでも勉強の一環として質問させていただきました。
これからもよろしくお願いします。

 

お礼日時:2008/11/11 21:09

何のことを言っているのか、よくわからないのです。


InputBox関数は""も含めて何かを入力してOKを押せば、それが返ってくるものです。
質問の例なら、myDataに""が返っている。これを取って後はどのようにするかは、コードで書けばいいことでしょう。
あなたは、""のとき、MsgBox "キャンセル"、""以外のとき、MsgBox "入力OK"としたのですが、これを入れ替えれば、、""のとき、MsgBox "入力OK"、""以外のとき、MsgBox "キャンセル"となって、[当然ながら「キャンセル」と判断]されているわけではありません。
[入力ボックスが未入力の状態でOKボタンを押すと]、
""が返るだけです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
質問の仕方に不備があったやも知れませんね。
以後気をつけたいと思います。

お礼日時:2008/11/11 21:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!