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

「レコード保存ボタン」クラスの改良

前回の記事 閉じるときに更新前処理をキャンセルすると出るメッセージを変更 の仕様を「レコード保存ボタン」クラスにも適用してみます。また、「閉じる」コマンドボタンも追加します。

CloseMsg.png

難易度:

「レコード保存ボタン」クラスの改良

クラスで自作イベントを実装する のサンプルを元に改良します。

上記サンプルのフォームにコマンドボタンを追加します。名前は「cmd閉じる」、標題は「閉じる」とします。

クラスモジュール(ClsSaveButton)を下記のように記述します。

フォームモジュールは下記のようになります。前回からの変更は7行目だけです。

加筆修正(2010/3/18): 新規レコードのとき、更新しても 保存ボタン、取り消しボタンが使用可能にならないという不具合がありました。対策として、挿入前処理のコードを追加しました。

これで、編集中に、「閉じる」ボタン、フォームタイトルバーのクローズボタン(×ボタン)、あるいはAccess本体のクローズボタン(×ボタン)、Alt+F4・・・・などでフォームを閉じようとすると下記のような確認メッセージが表示されて、「いいえ」をクリックすると閉じるのは中止されて編集状態に戻ります。

CloseMsg1.png

さて、ここで、このメッセージボックスと冒頭の画像のメッセージボックスを比べてみてください。冒頭のメッセージでは1行目が太字ですし、ボタンのデザインも違いますね。Accessの標準のMsgBox関数ではシステムのメッセージボックスとこのようにデザインが異なります。システムメッセージと同じデザインがいいと言う場合は、クラスモジュールの CloseConfirm関数を下記のように書きかえてください。
なお、この技はPicasoさんのブログ、Picasoのぴー: 太字のメッセージボックス の情報を参考にさせていただきました。

注: このクラスモジュールはAC2000以前には非対応となります。AC2000以前では、取り消し時イベントが未実装のためです。AC2000に対応させるためには、取り消し時イベントを削除して、また、影響も受ける部分も変更する必要があると思われますが、当方、AC2000環境を持ってないので、必要な方は各自で変更してください。

サンプルファイルが下記からダウンロードできます。
FrmSaveButtonClassWithEventKai_07.zip (Access 2007-2010 形式 - 35kb)
FrmSaveButtonClassWithEventKai.zip (Access 2002-2003 形式 - 34kb)

拍手する

4 Comments

ななーし says..."分からない点があり、教えて頂けませんか?"

現在、SaveBtn_BeforeUpdateが動作せず苦戦しておりまして、質問させて頂きます。
プログラムのフォームモジュールでSaveBtn_BeforeUpdateという部分がありますが、これはどのような動作をしているのでしょうか?クラスの方でもMyfrm_BeforeUpdateもやっています。どのようにプログラムに組み込めばよいのでしょうか?
よろしくお願いします。

2015.12.07 14:00 | URL | #0ewLR0QE [edit]
hatena says..."re:分からない点があり、教えて頂けませんか?"

> 現在、SaveBtn_BeforeUpdateが動作せず苦戦しておりまして、質問させて頂きます。
> プログラムのフォームモジュールでSaveBtn_BeforeUpdateという部分がありますが、これはどのような動作をしているのでしょうか?クラスの方でもMyfrm_BeforeUpdateもやっています。どのようにプログラムに組み込めばよいのでしょうか?
> よろしくお願いします。

とりあえず下記のページを読んでください。

「レコード保存ボタン」クラスで入力チェック - hatena chips
http://hatenachips.blog34.fc2.com/blog-entry-165.html

クラスで自作イベントを実装する - hatena chips
http://hatenachips.blog34.fc2.com/blog-entry-174.html

簡単に説明すると、
「レコード保存ボタン」クラスでフォームの更新前処理をキャンセルしています。
なので、フォームの更新前処理での入力チェックはできません。
そこで、クラスで保存する前に独自のイベントを発生させます。
フォーム側で、その独自イベントに入力チェックを記述できるという仕組みになっています。

この辺りはかなりややこしいので、上記のページをサンプルを見ながら熟読すると理解できるかな。

それで希望のことがうまくいかないということなら、
希望のことと書いてみたコードを提示してください。

2015.12.08 16:41 | URL | #5uE6dEgY [edit]
ななーし says...""

回答ありがとうございます。
やはり、Myfrm側はキャンセル動作なので必須なのですね。Savebtnの動作がまだわからないので熟読します。またわからなければ改めて質問します。
ありがとうございました!

2015.12.09 08:29 | URL | #0ewLR0QE [edit]
ななーし says..."解決しました!ありがとうござました。"

原因は教えて頂いたSavebtn_BeforeUpdateの前に入力が必須なものを動作させてエラーしているというものでした。順番を変えたことで解決しました。自分で関数定義もできるようになったことで汎用性も上がったのでいろんなことをクラス化できればいいなと思います。(複数あるものが今回多いのでクラスが使えるといいなと思いまして、1つのものは今まで通りでいきます)
ありがとうございました!

2015.12.10 14:45 | URL | #0ewLR0QE [edit]

Leave a reply






Trackbacks

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