Microsoft Access 掲示板

タイマー時処理によるrequeryができません

4 コメント
views
4 フォロー

Accessにて、タイマー時による下記VBAコードが実行されているにもかかわらず、更新されません。

Private Sub Form_Timer()
    Me.サブフォーム.Form.Requery
End Sub

詳細は、サブフォームを持つメインフォームに上記タイマー時イベントにコードを埋め込みました。
一定時間後、メインフォームがサブフォームにrequeryをかけるものです。
サブフォームのレコードソースにはクエリが設定されており、
そのクエリのもとになっているテーブルは、別のaccessファイルにリンクさせており、
リンク先のファイルで更新した後、
リンク元で上記コードが実行されてもデータの更新が全くされません。
ただ、タイマー時イベントでなく、クリック時等、ユーザがアクションを起こして同じコードを実行すると、
データの更新が行われます。
Me.サブフォーム.Form.Refresh
Me.サブフォーム.Form.Recalc
Me.サブフォーム.Form.Repaint
をやっても同じ結果です。画面が一瞬消える動作を行っているので、マクロは実行されているようです。
解決策をご存知の方いらっしゃいましたら、なにとぞご返信くださいますようお願いいたします。

KEI
作成: 2021/07/28 (水) 18:32:24
最終更新: 2021/07/28 (水) 18:39:40
通報 ...
1
りんご 2021/07/28 (水) 18:49:45 c564b@0e907

ただ、タイマー時イベントでなく、クリック時等、ユーザがアクションを起こして同じコードを実行すると、データの更新が行われます。
例えば、これは正しく動作しますか?動作しなければ、イベントが発生していない、、、?

Private Sub Form_Timer()
  Msgbox “あああ“  
End Sub
2

早速のご返信ありがとうございます。
ご指摘の内容を行いました。
メッセージボックス表示されました。

3
りんご 2021/07/29 (木) 01:07:29 c564b@0e907

>> 2
 色々試してみましたが、力不足でした、
 当面、タイマー時イベントから期待通りに動くイベントを呼び出すのは、どうでしょうか?

Private Sub Form_Click()
    Me.サブフォーム.Form.Requery
End Sub

Private Sub Form_Timer()
    Form_Click
End Sub

 どなたかフォローをお願いします。

4

ご助力感謝いたします。
本日、いただきましたコードを入れる前に下記のことを確認し一応の問題解決になりました。。
メインフォームには二つのサブフォームがあり、レコードソースにはクエリの内容は違うものの、
同じテーブルを元にしているクエリがセットされています。
そして、片方だけrequeryしておりましたが、両方することで、
更新が行われるようになりました。
また、クリック等では更新されるとありましたが、そのマクロの実行は両方のサブフォームをrequeryしておりました。
上記の通り、二つのサブフォームについて伝えていなかったこと、
そして、クリック等での更新については結果的に勘違いであったことお詫び申し上げます。

ただ、腑に落ちないのは、サブフォームが複数ある場合は両方しなければならない仕様なのでしょうか。
当然その場合は、処理に時間がかかるのでいかがなものかなと思います。

ご尽力いただきました、りんご様、本当にありがとうございました。