Microsoft Access 掲示板

他のフォームをrequeryする

7 コメント
views
4 フォロー

F管理を閉じるとき、F管理総合の並べ替えをしたくて、以下コードを記載したのですが
F管理を閉じるとき「F管理総合が見つかりません。」と表示されます。
なぜでしょうか。。
未だにrefresh、requeryを理解しきれていないようです。。

Private Sub Form_Close()
  Me.Refresh
  Forms!F管理総合.Requery
End Sub
セロハン
作成: 2020/11/26 (木) 15:49:00
通報 ...
1

そのエラーがでるとき「F管理総合」フォームは開いてますか。
あるいは「F管理総合」がサブフォームということはないですか。

2
セロハン 2020/11/30 (月) 16:53:26 0029a@1c915 >> 1

おそらく「F管理総合」フォームを開いていなかったようです・・そういうことですね。
ありがとうございました。

3
セロハン 2020/12/04 (金) 09:08:15 0029a@1c915

この件について、改めて質問させていただきたく投稿致します。
「F管理」を「F管理総合」から開くときと、直接他フォームの履歴から開くパターンがあります。
他フォームから開くときは「F管理総合」を開いていないのでエラーが起きるのですが、
「F管理総合」から開くときもあるので下記コードは残したいです。
条件分岐できますでしょうか。

Private Sub Form_Close()
  Me.Refresh
  Forms!F管理総合.Requery
End Sub
4
セロハン 2020/12/05 (土) 10:33:41 0029a@1c915 >> 3

On Error Resume Nextを使えばいいですね。解決しました。

5

Forms!F管理総合 と 他フォームが同時に開いていることがないということが保障されていればいいですが、
もし、同時に開いていて、他フォームから「F管理」を呼び出したとき、意図しない動作になる恐れがあります。

現状、同時に開くことがなくても、将来、機能を追加したり、仕様変更でそうならないとも限りません。

自分がするなら、「F管理」をダイアログモードで開いて、「F管理総合」の方で自身を再クエリするという方法を使いますね。

「F管理総合」のモジュール

DoCmd.OpenForm "F管理", Windowmode:=acDialog
Me.Requery

「F管理」のモジュール

Private Sub Form_Close()
  Me.Refresh
End Sub

ご参考までに。

6
セロハン 2020/12/05 (土) 20:21:35 f1ed8@5dbd2 >> 5

ありがとうございます。そこまで考えが及びませんでした。
スミマセン、F管理を閉じるとき、F管理総合をrequeryしないといけないと思っていたのですが、教えていただいた内容だとF管理を開くときにrequeryしているようです。
ダイアログだと閉じるときrequeryになるということでしょうか?

7
hatena 2020/12/06 (日) 13:04:55 修正

ダイアログだと閉じるときrequeryになるということでしょうか?

はい、その通りです。
Windowmode:=acDialog を指定して(ダイアログモードで)開くと、開いたフォームを閉じるまで次のコードに進みません。
閉じた後に次のコードが実行されます。