• ベストアンサー

「yes」なら実行させて「no」なら実行させない仕組みをAccessのマクロで作れますか?

以前にも似たようなご質問をしましたが、回答して頂いた内容が私では解らなかったので再度させて頂きます。 “クエリ”を実行させる前に『「本当に実行しますか?」とメッセージを表示させて、「yes」なら実行させて「no」なら実行させない』という仕組みを「マクロ」で作れないのでしょうか? 私が作成した方法は マクロの 1行目 「アクション」のとこで「メッセージボックス」を選択し、アクションの引数「メッセージ」の箇所に「本当に実行しますか?」と入力。 2行目 「アクション」のとこで「クエリを開く」を選択し、アクションの引数「クエリ名」の箇所に「●●クエリ(任意のクエリ)」と入力。 そして保存します。 そのマクロを実行させても「本当に実行しますか?」のメッセージが出て、「OK」のボタンしか表示されないんです。 (当たり前なのかもしれませんが…) そしてその「OK」をESCキーで回避してもクエリが実行されてしまいます。 (当たり前なのかもしれませんが…) 上記の知識しかありません。どなたか柔らかくご説明して頂けないでしょうか?よろしくお願い致します。

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

自分はマクロをほとんど使わないので、VBA風になりますが・・・ 条件付のマクロにする([表示]→[条件]) 1行目 条件:MsgBox("本当に実行しますか?",4)<>6 アクション:全マクロの中止 2行目以降 Yes の場合の処理 こんな感じで出来ると思います。 4 とか 6 とかは、VBAの定数です。 VBA内では vbYes 等の名前で参照しますが、マクロ中では使えないと思いますので、直接数字を書きます。 幾つか定数を書いておきます。 (VBAのヘルプの MsgBoxを調べれば詳しく書いてます。) 1 vbOKCancel [OK] ボタンと [キャンセル] ボタンを表示します。 4 vbYesNo   [はい] ボタンと [いいえ] ボタンを表示します。 アイコンを表示するなら、上記の数字+下記の数字 16 vbCritical   警告メッセージ アイコンを表示します。 32 vbQuestion   問い合わせメッセージ アイコンを表示します。 48 vbExclamation 注意メッセージ アイコンを表示します。 64 vbInformation 情報メッセージ アイコンを表示します。 例:注意アイコン付き Yes/No :4 + 48 = 52   MsgBox(""本当に実行しますか?",52)<>6 となります。 戻り値の定数 1 vbOK 2 vbCancel 6 vbYes 7 vbNo 6 は Yes です。 <>6 でYesでなければ、中止・・・となります。

greentea69
質問者

お礼

やってみたらできました!ホント身震いするくらい感動です!!ありがとーございました

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

すみません、venzouさんの回答の通りなのですが・・・greentea69さんに 本当にお伝えしなければならない部分への触れ方があまりにもあっさりしていて 見過ごされてしまいそうな気がしたので、お節介ながら補足させて戴きます。 > 条件付のマクロにする([表示]→[条件]) というのは、マクロをデザインビューで開いたときのメニューから、「表示(V)」の 「条件(C)」をクリックして、「条件」欄を表示させる、ということです。 「アクション」欄の「メッセージボックス」というのは、メッセージを表示させるため だけのもので、今回のご質問のように場合分けをする際には、MsgBox関数を 「条件」欄で使用する必要があります。 (なお、「『はい』ならマクロAを、『いいえ』ならマクロBを、それぞれ実行」といった  ような動作をさせる場合は、フォーム上にテキストボックス(「可視」を「いいえ」  に設定)を作成し、「値の代入」アクションで「式」にMsgBox関数を、「アイテム」  にそのテキストボックスをそれぞれ指定して、「条件」欄には  「Forms!フォーム名!テキストボックス名=6」といった式を入れるようにします。  ・・・これは、今後の参考までに)

greentea69
質問者

お礼

すっごい参考になりました!今後、Access使用するのに幅が広がりそうです(^^)V

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんな感じかな。 If MsgBox("本当に実行しますか?」", vbYesNo) = vbYes Then 'クエリを実行 End If

greentea69
質問者

お礼

すんません。pkh4989さんのご回答の意味が理解しきれませんでした(;;)でもわざわざありがとうございました。またお願いします

関連するQ&A