• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセス InputBox キャンセルした場合を取)

アクセスInputBoxキャンセルした場合の処理方法

このQ&Aのポイント
  • アクセスのVBAでInputBoxを使ってユーザーからデータを入力する際、キャンセルボタンが押された場合の処理方法について教えてください。
  • 現在のサンプルコードではエクセル専用のため、アクセスではキャンセルボタンを無視されます。
  • アクセスでキャンセルされた場合に「キャンセルされました」と表示させる方法をご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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値でもエラーがでないように○のやり方で通したがよいと思います。

HODKDUBUNJT
質問者

お礼

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

その他の回答 (4)

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.5

最近、どこかで見たようだったので 探してみたらありました。 キャンセルボタンをクリックしたかどうかを取得したい http://okwave.jp/qa/q7909190.html

HODKDUBUNJT
質問者

お礼

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

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

補足のおまけです(蛇足かとは思いますが) 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

HODKDUBUNJT
質問者

お礼

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

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

> If VarType(returnData) = vbBoolean Then 変数がブーリアンであることを判定しているが、 その値がFALSEかどうか見ていないのでは?

HODKDUBUNJT
質問者

お礼

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

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

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を抜ける動作にするとかにしておくと良いのではないでしょうか。

HODKDUBUNJT
質問者

お礼

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

関連するQ&A

専門家に質問してみよう