Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2010)
コンボボックスとテキストボックスの変更時にサブフォームをRequeryする
投稿日時: 20/07/26 12:59:50
投稿者: mmiwa

教えてください
 
フォームに
氏名を選択するコンボボックスと
日付を選択するテキストボックス
そして
この二つのデータを抽出条件としたクエリの結果を
帳票形式で表示するサブフォームを
配置しました
 
コンボボックスchange時のイベントを
Forms![フォーム名]![サブフォーム名].Requery(下記と同じコードです)
 
テキストボックスchange時のイベントを
Forms![フォーム名]![サブフォーム名].Requery(上記と同じコードです)
 
としました
 
コンボボックスを変更した場合には
サブフォームが更新されるにもかかわらず
テキストボックスを更新した場合には
サブフォームが更新されません
 
同じコードにもかかわらず挙動が違うのは何故ですが?
何れの場合にも更新されるようにするためには、どうしたらよいですか?
 
よろしくお願いいたします

回答
投稿日時: 20/07/26 16:46:28
投稿者: hatena
投稿者のウェブサイトに移動

テキストボックスchange時のイベントではなく、更新後処理のイベントで再クエリしてください。

投稿日時: 20/07/26 19:52:19
投稿者: mmiwa

hatena 様
 
ありがとうございました
 
更新されるようになりました
 
テキストボックスを変更しても
参照されるテキストボックス内の日付は
それまで格納されていた日付を参照していたということでしょうか?
 
実はイベントの発生タイミングの問題かと考え
Forms![フォーム名]![サブフォーム名].Requery
Msgbox "OK"
とコードして動きを見ていました
 
これを変更時イベントに記載しても
サブフォームの更新はされないのに
メッセージボックスは表示されたのです
 
 

回答
投稿日時: 20/07/26 20:27:31
投稿者: hatena
投稿者のウェブサイトに移動

テキストボックスの変更時イベントは、テキストボックスにフォーカスがあるときにテキストを編集するたびに発生します。一文字入力しても一文字削除しても発生します。だだし、表示されているテキストは変更されますが、Valueプロパティは変更されません。Enterキー等を押して更新を確定したときにはじめてValueプロパティが変更されます。そのときに更新前処理、更新後処理が発生します。
 
変更時イベントではValueは元のままなので、そこでRequeryしても元の値による条件で再クエリされることになります。
 
コンボボックスの場合は、リストから選択すると変更時イベントと同時に更新前処理、更新後処理も同時に発生します。Valueを変更されるので、変更された条件で再クエリされます。
 
ただし、コンボボックスのテキストボックス部分で直接入力したり削除した場合は変更時イベントのみ発生してValueは変更されません。
 
ですので、コンボボックスも更新後処理に再クエリの処理を記述したほうが無駄がないです。

投稿日時: 20/07/26 20:41:49
投稿者: mmiwa

hatena 様
 
ありがとうございました
非常によく分かりました
 
曖昧な知識に基づいてコードを書いていたのだなあと
恥ずかしく思いました
 
勉強になりました
 
今後もよろしくお願いいたします