Accessでマクロのメッセージを非表示にする方法をお探しですね。

広告

Accessのアクションクエリで確認メッセージを非表示にする方法

Accessでデータベースを作っていると、追加クエリ、更新クエリ、削除クエリ、テーブル作成クエリといった「アクションクエリ」をよく使いますよね。

これらを実行すると、Accessの初期設定では「〇件のレコードを追加します」とか「〇件のレコードを削除します」といった確認メッセージが毎回出てきます。

手作業でやっているときは、うっかりミスを防げて便利なんですが、マクロやVBAで自動化しているときは、このメッセージが出るたびに処理が止まってしまうんです。

せっかく自動化したのに、画面の前で「はい」ボタンをポチポチ押さなきゃいけないなんて、ちょっと残念ですよね。

この記事では、そんなストレスを解消するために、アクションクエリ実行時の確認メッセージを表示させない方法を詳しく紹介します。

初心者の方でも使いやすいマクロでの設定から、実務で役立つVBAの安全な書き方まで、まとめて解説していきますね。

マクロで確認メッセージを消す基本のやり方

Accessの「マクロ」機能を使ってシステムを作っている場合、実はとても簡単にメッセージを消すことができます。

マクロのデザインビューを開いて、アクションカタログから「メッセージの設定」を選びます。

そして画面下の設定で「メッセージの表示」を「いいえ」に変えるだけ。

これだけで、その後に実行されるアクションクエリの警告が出なくなって、スムーズに処理が進むようになります。

ただし、ここで注意点があります。

「メッセージの設定」を「いいえ」にすると、その設定がAccess全体に影響してしまうんです。

つまり、マクロの処理が終わった後も、ずっと警告が出ない状態になってしまいます。

これだと、あとで手作業で大事なデータを削除しようとしたときにも確認画面が出なくなって、うっかりミスにつながる危険があります。

なので、正しいやり方は、アクションクエリを実行したあとに、もう一度「メッセージの設定」を追加して、今度は「はい」に戻すこと。

つまり、クエリ実行の前後で設定を挟み込むイメージです。

こうしておけば、必要なときだけメッセージを消して、終わったらちゃんと元に戻せます。

マクロはコードを書かなくても使えるので、VBAに慣れていない方にもおすすめの方法です。

VBAのDoCmd.SetWarningsを使った方法と注意点

VBAでプログラムを書いている場合は、「DoCmd.SetWarnings」というコマンドを使って確認メッセージのオン・オフを切り替えられます。

アクションクエリを実行する「DoCmd.RunSQL」や「DoCmd.OpenQuery」の前に、「DoCmd.SetWarnings False」と書きます。

これで警告が一時的に無効になって、メッセージが出ずにクエリが実行されます。

そして処理が終わったら、必ず「DoCmd.SetWarnings True」と書いて設定を元に戻します。

この「False」で消して「True」で戻すというやり方は、VBAの基本テクニックとしてよく紹介されています。

でも実際に使うときは、けっこう注意が必要なんです。

なぜかというと、「DoCmd.SetWarnings False」が実行された状態のままプログラムが止まってしまうと、Accessを再起動するまで警告がずっとオフのままになってしまうからです。

たとえば、開発中にこの状態で放置してしまうと、あとで別のテーブルのデータを間違って操作しても警告が出ず、大事なデータを失ってしまうかもしれません。

だから、VBAでこのコマンドを使うときは、どんな状況でも必ず「True」に戻るようなプログラムにすることが大切です。

手軽に使える反面、システム全体に影響する強力なコマンドだということを覚えておきましょう。

エラーが起きても安全な仕組みを作る

「DoCmd.SetWarnings」を使うときは、確実に「True」に戻すことがとても重要です。

でも、単に処理の最後に書くだけでは不十分なことがあります。

その代表例が、クエリ実行中にエラーが起きた場合です。

たとえば、追加しようとしたデータが重複していたり、必須項目が空欄だったりすると、エラーが発生してプログラムがそこで止まってしまいます。

すると、最後の「DoCmd.SetWarnings True」まで到達せずに終わってしまうので、警告がオフのまま残ってしまうんです。

こんな危ない状態を防ぐには、VBAの「エラーハンドリング(エラー処理)」をきちんと書く必要があります。

具体的には、こんな感じです。

* プログラムの最初に「On Error GoTo エラーラベル」と書いて、エラーが起きたときの飛び先を指定する
* 正常に終わったときの最後に「DoCmd.SetWarnings True」を書いて、その直後に「Exit Sub」で抜ける
* 一番下に「エラーラベル」を作って、そこにエラーメッセージの表示と「DoCmd.SetWarnings True」を書く

こうすることで、正常に終わっても、エラーが起きても、必ず「DoCmd.SetWarnings True」を通るようになります。

業務で使うシステムを作るときは、こういった安全対策がとても大事です。

どんなに気をつけていても予期せぬエラーは起こるものなので、万が一のときにも被害を最小限にする考え方が重要なんですね。

もっと安全なCurrentDb.Executeという方法

ここまで「DoCmd.SetWarnings」を使った方法と、そのリスク管理について説明してきましたが、実はもっと良い方法があります。

それが「CurrentDb.Execute」というメソッドです。

このメソッドは、SQL文やクエリをAccessの画面を通さずに、直接データベースエンジンに渡して実行する仕組みです。

画面を通さないので、最初から確認メッセージが出ません。

この方法の一番のメリットは、「DoCmd.SetWarnings False」で警告をオフにして、あとで「True」に戻すという面倒な作業が一切いらないことです。

設定を変えないので、もしクエリ実行中にエラーが起きてプログラムが止まっても、警告設定がオフのまま残るというリスクがゼロになります。

安全性の面で、とても優れた方法なんです。

さらに、「CurrentDb.Execute」には「dbFailOnError」というオプションを付けられるという便利な機能があります。

このオプションを付けると、一部のデータ処理に失敗したときに、すべての処理を自動的に取り消してくれるので、データの不整合を防げます。

「DoCmd.RunSQL」よりも処理が速いというメリットもあるので、大量のデータを扱うシステムにも向いています。

VBAでアクションクエリを実行するときは、特別な理由がなければ、この安全で高速な「CurrentDb.Execute」を使うのがおすすめです。

広告