[[20050314190246]] 『vbYesNoについて』(純丸) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『vbYesNoについて』(純丸)

 確認:
  kakunin = MsgBox("データを登録しますか?", vbYesNo, "登録確認")
  If kakunin <> vbYes And kakunin <> vbNo Then
      GoTo 確認
  End If

 こんなコードを書きましたが、Enterキーでも Yesとして先に進んでしまいます。
 Enterキーでは先に進めないようにするにはどうしたらよいのでしょうか?
 (純丸) 

 ユーザーに操作させたいということですね?
Option Explicit
Sub てすと()
Dim kakunin As VbMsgBoxResult
kakunin = MsgBox("データを登録しますか?", vbYesNo + vbDefaultButton2, "登録確認")
  If kakunin = vbYes Then
'      GoTo 確認
  End If
End Sub
(SoulMan)


 SoulManさん、ありがとうございます。
 *** VBAのヘルプ:vbDefaultButton2 第2ボタンを標準ボタンに設定します。*** 
 と言うことは、Enterキーを押すと、No と同じということですよね。
 実際に試したところそういう動きになりました。自分の希望としては、
 Enterキーを押したら再度、MsgBox で入力待ちの状態に戻りたいのです。
 理由は、データをセルに入力していって、あるセルまで行ったらチェンジイベントで
 MsgBoxを使うので、データ入力の勢いのまま Enterキーを押してしまうのを
 制御したいのです。よろしくお願いします。
 (純丸)


 そのまま戻ればどうでしょうか。
 
Sub Test1()
確認:
  kakunin = MsgBox("データを登録しますか?", vbYesNo + vbDefaultButton2, "登録確認")
  If kakunin <> vbYes Then
      GoTo 確認
  End If
  '登録コード
End Sub

 (川野鮎太郎)

 はい、いいえ、再試行があればいいんですけどね。。
Option Explicit
Sub てすと()
Dim kakunin As VbMsgBoxResult
確認:
kakunin = MsgBox("データを登録しますか?", vbYesNoCancel + vbDefaultButton3, "登録確認")
Select Case kakunin
    Case vbYes
    '      GoTo 確認
    Case vbNo
    '   処理
    Case vbCancel
        GoTo 確認
End Select
End Sub
(SoulMan)


 To 鮎さん
 No の時は MsgBox を閉じて入力セルに戻りたいんですよ。
 ○ Yes の場合はデータ登録へ(先に進む)
 ○ No の場合はデータ入力セルに戻る
 ○ YesとNo以外は、MsgBox の入力に戻る ← Enterキーはここにしたい。

 ここまで書いて登録しようとしたら衝突☆!
 SoulManさん、なるほどです。キャンセルボタンを作って、そこを標準ボタンに
 する訳ですね。動きはOKですが、キャンセルボタンをクリックしても
 キャンセル出来ないのがちょっと気になります。贅沢言ってすみません。
 (純丸)
 ※ すみませんがこれで会社を出ますのですぐに返事することが出来ません。(o^-')b

 衝突したのでかぶったけど……

 「やっぱり登録したくないな」って場合もあると思うので、
キャンセルも用意した方がいいんじゃないかな……と老婆心。
Sub test()
    Dim Ret As Long
    Dim blnCancel As Boolean
    blnCancel = False
    Do
        Ret = MsgBox("データを登録しますか?", vbYesNoCancel + vbDefaultButton2, "登録確認")
        Select Case Ret
            Case vbYes
                Exit Do
            Case vbNo
            Case vbCancel
                blnCancel = True
                Exit Do
        End Select
    Loop
    If blnCancel Then
        Exit Sub
    End If
    '通常処理
End Sub
追記:衝突後の書き込みは見てなかったんで、適当に直してください。
(ご近所PG)コードが無駄に長いのは個人的な癖。


 朝からパソコントラブルで、ようやく復旧、返事が遅れてすみません。m(__)m
 ご近所PGさんのコードですが、やはり希望の動きとは違います。上に書いたように
 ○ Yes の場合はデータ登録へ(先に進む)
 ○ No の場合はデータ入力セルに戻る(MsgBoxに到達する前の処理へ戻る)
 ○ YesとNo以外は、MsgBox の入力待ちに戻る ← Enterキーはここにしたい。
 のようにしたいのです。してみると、手練れのお3人が考えていただいて
 出来ないとなると、MsgBoxの限界なのかしらん?例えばユーザーフォームなら
 可能ですか?(質問はしたけど自分でもTRYしてみます)
 (純丸)(o^-')b


 > ○ No の場合はデータ入力セルに戻る(MsgBoxに到達する前の処理へ戻る)
 Exit Sub ということでしょうか・・・?

 (INA)


 INAさん、すみません。Exit Sub で大丈夫です。自分のコードでは、Yesの時が
 登録処理→Exit Sub ですが、逆でも問題ありません。
 (純丸)(o^-')b 

 なんか、皆さんのとあまり変わらないですが・・

 Sub test()
 Dim Ret As Long

 Retry:
    Ret = MsgBox("データを登録しますか?", vbYesNoCancel + vbDefaultButton3, "登録確認")

        Select Case Ret
        Case vbNo
            Exit Sub
        Case vbCancel
            GoTo Retry
        End Select

    MsgBox "処理"
 End Sub

  (INA)


 INAさん、ありがとうございます。SoulManさんへの返答で書いたように動きとしては
 これでOKです。ただ、Cancelボタンがキャンセルじゃなくてリトライなのが
 ちょっと気になっただけです。ようするに、他人に使わせるという理由で贅沢を
 言っている訳ですね。標準ボタンの設定に限界があるのだと理解します。 
 大御所の皆さんに回答いただいて恐縮でした。皆さん、ありがとうございました。m(__)m
 (純丸)(o^-')b

 >Enterキーを押したら再度、MsgBox で入力待ちの状態に戻りたいのです
 >YesとNo以外は、MsgBox の入力待ちに戻る 
 >Cancelボタンがキャンセルじゃなくてリトライなのがちょっと気になった

 あれっ? 勘違い・・・
 単純にEnterキーを無効にするということだったのかな・・・ 
 ユーザーフォームを使うしかなさそう・・・
  (INA)


 衝突☆!ですが、そのままUP。
 元々は、YesとNoだけで、Yesなら処理、Noなら抜けるというコードです。しかし
 これだと Enterキーが Yes になってしまうのが都合が悪いので、Enterキーが
 リトライにならないか?という質問でした。それで皆さんが考えていただき、
 標準ボタンを3にする→キャンセルボタン表示、ということになった訳です。
 YesとNoだけが理想なのです。
 (純丸)(o^-')b


 そうですよね・・理解せずに回答して申し訳ないです・・・
  
 Enterキーを無効にするのが最良ならユーザーフォームを使うのが
 簡単だと思います。
 Application.OnKey "{RETURN}", ""
 では、Msgbox表示中に対応できなかったので。

 Msgbox移動のときと同じようにCBTフックして、VK_Returnを削除すればできそうだけど、
 そこまでするなら ユーザーフォームを使った方がいい・・・  (INA)
 

 ユーザーフォームはまだよくわかりませんが、いろいろやってみます。
 ありがとうございました。
 (純丸)(o^-')b


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.