- ベストアンサー
アクセスInputBoxキャンセルした場合の処理方法
- アクセスのVBAでInputBoxを使ってユーザーからデータを入力する際、キャンセルボタンが押された場合の処理方法について教えてください。
- 現在のサンプルコードではエクセル専用のため、アクセスではキャンセルボタンを無視されます。
- アクセスでキャンセルされた場合に「キャンセルされました」と表示させる方法をご教授ください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
http://www.accessclub.jp/samplefile/help/help_48_2.htm 次のようにしてキャンセル時の戻り値をチェックしてみました。 Option Compare Database Dim Msg, Title, Default, MyValue Private Sub コマンド4_Click() Msg = "1 から 3 までの値を入力してください。" Title = "InputBox デモ" Default = "1" MyValue = InputBox(Msg, Title, Default) Debug.Print "MyValue=" & MyValue Debug.Print "Len(MyValue)=" & Len(MyValue) Debug.Print "IsNull(MyValue=" & IsNull(MyValue) Debug.Print "IsEmpty(MyValue=" & IsEmpty(MyValue) End Sub [イミディエイトウインドウ] MyValue= Len(MyValue)=0 IsNull(MyValue=False IsEmpty(MyValue=False 結果、Null でもなく空でもない長さが0の""が戻されていることが判ります。 このことから Len関数でのチェックが有効です。 Sub Sample() Dim returnData As Variant returnData = InputBox("データを入力してください") If Len(returnData & "") = 0 Then MsgBox "キャンセルされました" Exit Sub End If MsgBox "処理を続行します" End Sub ○If Len(returnData & "") = 0 Then ×If Len(returnData) = 0 Then なお、Null値でもエラーがでないように○のやり方で通したがよいと思います。
その他の回答 (4)
- m3_maki
- ベストアンサー率64% (296/460)
最近、どこかで見たようだったので 探してみたらありました。 キャンセルボタンをクリックしたかどうかを取得したい http://okwave.jp/qa/q7909190.html
お礼
ご回答ありがとうございます。
- kmetu
- ベストアンサー率41% (562/1346)
補足のおまけです(蛇足かとは思いますが) InputをLoopにしておいて~と書いたので一応つたないサンプルを。 Do returnData = InputBox("データを入力してください") If Len(returnData) = 0 Then If MsgBox("キャンセルしてよろしいですか", vbYesNo) = vbYes Then Exit Sub End If End If Loop Until Len(returnData) > 0
お礼
ご回答ありがとうございます。
- bin-chan
- ベストアンサー率33% (1403/4213)
> If VarType(returnData) = vbBoolean Then 変数がブーリアンであることを判定しているが、 その値がFALSEかどうか見ていないのでは?
お礼
ご回答ありがとうございます。
- kmetu
- ベストアンサー率41% (562/1346)
http://office.microsoft.com/ja-jp/access-help/HA001228856.aspx 上記のサイトの説明によると ユーザーが [キャンセル] をクリックした場合、長さ 0 の文字列が返されます。 ということなので If Len(returnData) = 0 Then もしくはIf returnData = "" Then MsgBox "キャンセルされました" Exit Sub END If とかでいけるのではないでしょうか。 ただし、未入力でOKを押してもキャンセルと同じ扱いになりますので、未入力とキャンセルを分けたい場合には、入力用フォームを作成して対応するか、InputをLoopにしておいて、入力データがあるか、キャンセルもしくは未入力の場合はMsgBoxで再確認後にキャンセルでよければLoopを抜ける動作にするとかにしておくと良いのではないでしょうか。
お礼
ご回答ありがとうございます。
お礼
ご回答ありがとうございます。