概要説明
複数のフォームが開かれている場合に、全てのフォームをまとめて閉じたい場合があります。
そこで開かれているフォームの数を調べて、自動的に順番にフォームをまとめて閉じる方法を説明します。
- (ポイント)
- Formsコレクションで開いているフォームの数を調べる(フォームは開いた順に番号を持っている)
- 大きな番号を持っているフォームから閉じてゆく(先頭から閉じるとフォーム番号がシフトしてしまう)
- Formsステートメントでフォームの数だけCloseメソッドを繰り返す
- 他の場面でも使えるように標準プロシージャとして作成する。
作成例
- 標準モジュールを作成する。
データベースウインドウのモジュールウインドウを開き「メニュー」から「挿入」→「標準モジュール」でEditorが開く。次のプロシージャを記述する。
(以下がコード)
' 開いているすべてのフォームを閉じる
Sub CloseAllForms()
' フォームの番号を入れる変数
Dim intLoop As Integer
' フォームの数だけ繰り返す
For intLoop = Forms.Count - 1 To 0 Step -1
' intLoop番のフォームを閉じる
DoCmd.Close acForm, Forms(intLoop).name
Next intLoop
End Sub - フォームの「閉じる」ボタンのプロシージャに作成した標準プロシージャを呼び出す記述をする。
(以下がコード)
Private Sub Cmd_閉じる_Click()
' 標準プロシージャを呼び出し実行
Call CloseAllForms
' メニューフォームは開いておく
DoCmd.OpenForm "F_MENU"
End Sub - これで完成。フォーム数に関係なくまとめてフォームが閉じられます。しかしメニューフォームは開いておかないと困りますね。そのコマンドも記述しておきましょう。
(この項終わり)