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

値の代入で更新イベントを発生させる

ここの以前の記事の 入力ダイアログフォームの設計 へのコメントで

値を代入後の更新後イベントが発生しません。
という質問がありました。

ユーザーの入力でなく、VBAやマクロでの値の代入では、更新関係のイベント(更新前処理、更新後処理等)は発生しないというのは、Accessの仕様です。

では、VBAやマクロでの値の代入でも、更新関係のイベントを発生させるにはどうしたらいいでしょうか。

難易度:

対処法1

Value は省略可能なので、 と記述しても同じ意味です。このように、Valueプロパティに値を代入しても更新イベントは発生しません。

では、どうするかというと、Textプロパティに代入します。ただし、Textプロパティはフォーカスがあるときしか有効でないので、事前にSetFocusしておく必要があります。

これで更新イベントを発生されることができます。

対処法2

フォーカス移動させることなくイベントを発生させたい場合は、イベントプロシージャを直接Callします。更新後処理を呼び出したいときは、

Call は省略することができます。

入力ダイアログフォームへの適用

入力ダイアログフォームの設計 - hatena chips の汎用関数 CallInputForm で、更新イベントを発生させるか、させないか引数で指定できように改造してみます。幸いなことに、CallInputForm では代入するコントロールはすでにアクティブになってますので、対処法1 の方法がそのまま使えます。

標準モジュール

InputForm のモジュール

通常は、コマンドボタンのクリック時のイベントプロパティの「クリック時」欄に
=CallInputForm([txt1])
としますが、更新イベントを発生させたいときは、
=CallInputForm([txt1], True)
と設定します。

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


拍手する

1 Comments

なおと says..."感激でしびれました"

一晩でお返事をいただけるとは、、、感激です。

基本的な仕様を理解していない点、申し訳なく恥ずかしい思いです。

Accessを業務のサポートとして利用していますが、このように丁寧に教えて頂ける方が多くいらっしゃる点、本当に頭が下がります。

特に、管理人さんの説明は丁寧で感動します。
しかも、記事の多くが他の解説サイトではなかなか見当たらないものでした。

ありがとうございました!!

2009.04.14 08:45 | URL | #- [edit]

Leave a reply






Trackbacks

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