あるフォームを開いてデータ入力を行い、そのフォームが閉じられたら次の処理(ステートメント)を続行したいような場合、そのフォームが"ダイアログ"に設定されていれば自動的にVBAのコードは停止した状態になりますが、それ以外のフォーム、あるいはレポートのプレビューウィンドウではすぐに次のステートメントが実行されてしまいます。そのような場合に利用できる、指定したオブジェクトが閉じるまで待機するSubプロシージャをご紹介します。
Public Sub WaitObjectClose(intObjType As Integer, strObjName As String)
'intObjType には acTable、acForm、acReportなどの定数を指定します
'strObjName にはそのオブジェクト名を指定します
Do
DoEvents
'SysCmdでオブジェクトが開いているか確認します
Loop Until SysCmd(acSysCmdGetObjectState, intObjType, strObjName)
= 0
End Sub
使用例:
DoCmd.OpenForm "フォーム1"
WaitObjectClose acForm, "フォーム1"
MsgBox "フォームが閉じられました!"
|