Access VBAで、フォームの流れで起きる不可解な現象
お世話になります。
表題が分かりにくく、申し訳ありません。
メインのフォームがあり、ボタンを押してF_1が開き、その中のボタンを押すとF_2が開き、さらにその中のボタンを押すとF_3と続くという、メイン→F_1→F_2→F_3の構成のツールを作ろうとしています。
F_1からF_3のフォームには、うっかり閉じてしまってはいけないように、終了確認のダイアログが出てからフォームを閉じるようにしています。また、F_1,2は、子のフォームを開くときはVisibleをFalseにして非表示にしています。
やりたいことは、F_3のフォームでボタンを押して処理を終了させた場合にのみ、F_2,F_1のフォームを確認をせずにクローズしてメインのフォームに戻りたいのです。ボタンの処理を行わずにユーザからのフォームを閉じる作業をしたときは、順番通りにF_3,F_2,F_1の順で確認のダイアログを表示しながら閉じさせたいのです。
コード的には難しくないと思い組んでみたのですが、問題があり、最後の『処理』ボタンを押して終了するのはできたのですが、手動でフォームを閉じていく場合、F_1フォームだけが非表示のまま現れず、メインのフォームに戻ってしまいます。その状態で再びF_1フォームを開いても、OpenではなくVisibleがTrueになって表示されるだけになってしまいます。F_1のフォームではOpen時に処理をしているので、これではよくありません。
原因と対策をご教授願えますでしょうか。
下記がコードになります。
メイン
Option Compare Database
Option Explicit
Private Sub コマンド0_Click()
DoCmd.OpenForm "F_1", windowmode:=acDialog
End Sub
F_1
Option Compare Database
Option Explicit
Public bChk As Boolean
Private Sub btnExit_Click()
On Error Resume Next
DoCmd.Close
End Sub
Private Sub btnOpen_Click()
Me.Visible = False
DoCmd.OpenForm "F_2", windowmode:=acDialog
Me.Visible = True
If (Form_F_1.bChk = True) Then
On Error Resume Next
DoCmd.Close
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
bChk = False
MsgBox "初期化しました。"
End Sub
Private Sub Form_Unload(Cancel As Integer)
If (Form_F_1.bChk = True) Then
Exit Sub
End If
If (MsgBox("終了しますか?", vbOKCancel + vbQuestion, "") <> vbOK) Then
Cancel = True
End If
End Sub
F_2
Option Compare Database
Option Explicit
Private Sub btnExit_Click()
On Error Resume Next
DoCmd.Close
End Sub
Private Sub btnOpen_Click()
Me.Visible = False
DoCmd.OpenForm "F_3", windowmode:=acDialog
Me.Visible = True
If (Form_F_1.bChk = True) Then
On Error Resume Next
DoCmd.Close
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
End Sub
Private Sub Form_Unload(Cancel As Integer)
If (Form_F_1.bChk = True) Then
Exit Sub
End If
If (MsgBox("終了しますか?", vbOKCancel + vbQuestion, "") <> vbOK) Then
Cancel = True
End If
End Sub
F_3
Option Compare Database
Option Explicit
Private Sub btnExit_Click()
On Error Resume Next
DoCmd.Close
End Sub
Private Sub btnExec_Click()
MsgBox "処理は完了しました。"
Form_F_1.bChk = True
DoCmd.Close
End Sub
Private Sub Form_Unload(Cancel As Integer)
If (Form_F_1.bChk = True) Then
Exit Sub
End If
If (MsgBox("終了しますか?", vbOKCancel + vbQuestion, "") <> vbOK) Then
Cancel = True
End If
End Sub
フロー図
何卒よろしくお願いいたします。