- ベストアンサー
ACCESSのInputBox
いつもお世話になっています。 ACCESSでInputBox関数を使っているのですが、 キャンセルボタンが押されたときの処理が分かりません。 InputBoxに何もない状態でキャンセルが押される時の処理は分かるのですが、何か入力された状態で、キャンセルが押された場合、どうしたらよいのでしょうか? 変数=InputBox("○○",,初期値) 何も入力されていない場合なら、if 変数="" Then で問題は無いのですが、初期値を設定したいので、必ず何かが入力されている状態になっています。 よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#5の続きです。 参考URLが無かったですね。 http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips06_2.htm
その他の回答 (5)
- popesyu
- ベストアンサー率36% (1782/4883)
2、3番です。すでに当初の質問は解決されてて別の案件になっていると思いますが。続けて回答しておきます。 でカレンダーコントロールの使い方に関しては アクセスは標準で「MSCAL.ocx」というActiveXコントロールがついています。 もしこれを利用するなら 多分バージョンによって異なるでしょうが officeXPでしたら 挿入>ActiveXコントロールから「カレンダーコントロール*.*」で カレンダーオブジェクトを貼り付けられます。 細かい使い方は参考URLで。 別にアクセス付属のものでなくても他にも多数ありますので、使い勝手が悪いようでしたら他のコントロールを試されて下さい。
- imogasi
- ベストアンサー率27% (4737/17069)
http://www.fukkey.dyndns.org/pins/vb/010626/28431.html に載っています。 私も、エクセルVBAで確認済み。アクセスVBAでもここらは 同じでしょう。 Sub test01() Dim a As String a = InputBox("aa") If StrPtr(a) = 0 Then MsgBox "キャンセル された" Else MsgBox "OK " & a & " が入力された" End If End Sub
お礼
ありがとうございます。 文字列ならば、簡単だったのですが、今回は、日付型で 引っかかったようです。 URLの方、参考にしたいと思います。
- popesyu
- ベストアンサー率36% (1782/4883)
2番ですが。 そのエラーは返り値が入る"変数"の型の問題でしょう。 仰るとおり、おそらく"変数"を「Date」型にされているのでしょうから、そこに空の文字列「String」が入る訳がないということで。 対応に関しては・・・ まぁそこには必ず日付型が入るという前提になっているのなら、Inputboxで手抜きをせずにw カレンダーコントロールとか使って、カレンダーから日付を選択させるとかが、正統な対策かと思います。 あるいはコンボボックスを使ってどこかのテーブルから拾ってきた日付一覧から項目を選択させるとかでしょうかね。 もしそのままInputBoxを使うなら 仰るとおり、一旦Variant型で受けて、そこから日付型に変換するとか、文字列だったら日付で入力して下さいとかの判別をさせるというぐらいでしょうか。この方法は全てのケースを考えて予防線をはっておかないとバグの温床になりますから。あまりお勧めではありませんよ。
お礼
ありがとうございます。 決して手抜きをしているわけではなく、検索するにはInputBoxかな?と思ったわけで(^^ゞ入力も楽だし。 ちなみに、カレンダーコントロールってどうやって使ったらよいのでしょうか? 無知で申し訳ありませんがよろしくお願いします。
- popesyu
- ベストアンサー率36% (1782/4883)
InputBox関数は[キャンセル]ボタンがクリックされたら何かが入力されていようがいまいが、空の文字列を返しますよ。 MsgBox (InputBox("テスト"),"title","default") で試してみて下さい。 ですのでそのまま if 変数="" Then で対応できるはずですが。
お礼
私も、そう思っていたので、やってみたのですが、上手くできなかったもので(^^ゞ それじゃあ、きっと別の問題ですね。 InputBoxには日付が入るのですが、キャンセルボタンを押した場合にだけ、「データ型が違います」のメッセージが出るので、てっきり、キャンセルボタンの問題だと思いこんでしまいました。 なぜ、エラーになるのでしょう?
補足
ごめんなさい。書いていて気付きました。 日付だから出来ないんですよね? じゃあ、一度、文字列で入力させた後、日時値に変えたらいいのでしょうか?
- Gin_F
- ベストアンサー率63% (286/453)
キャンセルを押したら、エラーになります。 そのエラー番号を使って、トラップしてやればいいと 思います。 On Error Err.Number を使えばできますので。 #詳しくは、ヘルプで使用例を確認してください。
お礼
早速ありがとうございます。 そうですね。エラートラップを利用すれば良いのですよね。 ありがとうございました。
お礼
何度もありがとうございます。 大変参考になりました。 今回は、カレンダーは使わず、コンボボックスで対応することにしました。 大変お世話になりました。