[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.