アプリ版:「スタンプのみでお礼する」機能のリリースについて

InputBoxでキャンセルしたら、キャンセルされましたと表示させたいのですが
どうも私のやってるサンプルはエクセル専用のようです。
http://www.moug.net/tech/exvba/0100036.html

自分なりに書き換えてみたのですが
キャンセルボタンを押しても無視されます。

Sub Sample()
Dim returnData As Variant
returnData = InputBox("データを入力してください")

If VarType(returnData) = vbBoolean Then
MsgBox "キャンセルされました"
Exit Sub
End If

MsgBox "処理を続行します"
End Sub

アクセスではできないのでしょうか?ご教授よろしくお願いします。

A 回答 (5件)

http://www.accessclub.jp/samplefile/help/help_48 …

次のようにしてキャンセル時の戻り値をチェックしてみました。

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値でもエラーがでないように○のやり方で通したがよいと思います。
    • good
    • 2
この回答へのお礼

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

お礼日時:2013/10/07 21:50

最近、どこかで見たようだったので


探してみたらありました。

キャンセルボタンをクリックしたかどうかを取得したい
http://oshiete.goo.ne.jp/qa/7909190.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/07 21:50

補足のおまけです(蛇足かとは思いますが)



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
    • good
    • 1
この回答へのお礼

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

お礼日時:2013/10/07 21:50

> If VarType(returnData) = vbBoolean Then


変数がブーリアンであることを判定しているが、
その値がFALSEかどうか見ていないのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/07 21:50

http://office.microsoft.com/ja-jp/access-help/HA …

上記のサイトの説明によると

ユーザーが [キャンセル] をクリックした場合、長さ 0 の文字列が返されます。

ということなので

If Len(returnData) = 0 Then
もしくはIf returnData = "" Then

MsgBox "キャンセルされました"
Exit Sub
END If

とかでいけるのではないでしょうか。

ただし、未入力でOKを押してもキャンセルと同じ扱いになりますので、未入力とキャンセルを分けたい場合には、入力用フォームを作成して対応するか、InputをLoopにしておいて、入力データがあるか、キャンセルもしくは未入力の場合はMsgBoxで再確認後にキャンセルでよければLoopを抜ける動作にするとかにしておくと良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/07 21:50

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