MS Access Tips/Sample and VBA and Blog customize etc...

ACCESSの閉じるボタンを無効にする?

access自体の閉じるボタンを無効にすることはできないでしょうか?フォームの閉じるボタンはプロパティから制御できるのですが、access本体の閉じるボタンを無効にしたんいてす。

このような質問もよく見かけます。WEB検索すればAPIを使う方法が見つかります。例えば、メニューバーの閉じるボタンを無効化にする方法

しかし、なぜ、Windowsの標準UIである閉じるボタンを無効化したいのでしょうか。「WindowsのUI自体が気に入らない」という方は仕方がないので上記のAPIをお使いください。しかし、ほとんどの人はそういう理由ではないはずです。おそらく、Accessを終了する前になんらかの確認をしたい、終了処理をしたいのだが、閉じるボタンで閉じられると、それらをスルーしてしまうのが困る、というのが理由ではないでしょうか。

その場合、APIで閉じるボタンを無効化したとしても、キーボードで終了することもできます(Alt+ F4等)。スタートメニューからログオフやシャットダウンを選択しても開いてるAccessは勝手に終了します。タスクマネージャーで終了させることもできます。それらの場合も終了処理をスルーしてしまいます。

「閉じるボタンを無効化」することが、本当にあなたの希望することですか。もう一度よく考えてみてください。

難易度:

まずは、MDBファイルを開いている間は常時表示しているメニューフォーム上に「終了」ボタンを配置して、それをクリックしないかぎり、終了しないようにする方法を紹介します。

メニューフォームは「起動時の設定」の「フォーム/ページの表示」に設定しておいて、起動時に開くようにしておきます。メニューフォームのフォームモジュールを下記のように設定します。

これで、タイトルバーの閉じるボタンをクリックしても、Alt+F4 でも閉じれなくなります。これで「終了」ボタンのクリック時に終了処理を記述すれば、OKでしょうか。

いいえ、だめです。ログオフやシャットダウンをすると、OSがこのMDBファイルを強制終了するかどうか確認してきます。ここで「はい」を選択してしまうと、やはり終了処理をスルーして閉じてしまいます。

発想をかえましょう。やりたいことは終了する前に必ず終了処理を実行させたいということです。Access自体を閉じるときのイベントがあればそこで終了処理を実行させればいいですが残念ながらそのようなイベントはありません。しかし、MDBが開いてる間は常に開いてるメニューフォームのようなものがあればそのフォームの「読み込み解除時」あるいは「閉じると時」イベントに設定すればいいのです。そのようなフォームがない場合は非表示でフォームを開いておいて、そのフォームの「読み込み解除時」あるいは「閉じる時」イベントで実行させるようにします。

MDBファイルを閉じる前に、終了するかどうかユーザーに確認して、「はい」を選択したら終了処理を実行して閉じる。「いいえ」を選択したら閉じるのを中止するという仕様にしてみます。

拍手する

1 Comments

マイン says..."Marvelous!!!"

はじめまして。
私はhatenaさんと同業の者ですが、最近は「手段」だけ考えて「目的」を考えない、奴が多いですね。  柔軟な発想が出来ずに何でもゴリゴリとコーディングに走る奴が多くて困ります。
そんな奴らに、この記事を100回ぐらい読ませたいですね。

2009.11.13 15:27 | URL | #- [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/163-eba39979
該当の記事は見つかりませんでした。