一度に複数のフォームを開く方法・現在のフォームから別のフォームを開く方法 オブジェクトを開く各書式を復習する Docmd.OpenTable テーブル名 , ビュー , モード Docmd.OpenReport レポート名 , ビュー , フィルタ名 , フィルタ条件式 , 表示モード , OpenArgs Docmd.OpenForm フォーム名 , ビュー , フィルタ名 , フィルタ条件式 , データモード , 表示モード , OpenArgs ※定数acDialogを使用する場合、基本的にはレコードセレクタ・移動ボタン・スクロールバーを無しとし、境界線スタイルを「ダイアログ」に設定 フォームモジュール内のボタンやその他イベントに記述 ※SelectObjectメソッドを使用(すっかり忘れている…) ScreenオブジェクトのActiveプロパティを使用し、現在アクティブになっているオブジェクトを参照
Docmdオブジェクトの【Open】メソッドのおさらい
※オブジェクト名以外の引数はほぼ省略可能OpenTableメソッド , OpenQueryメソッド
Docmd.OpenQuery クエリ名 , ビュー , モードDocmd.OpenTable "KEN_ALL",acViewNormal,acEdit 'ビューとモードの両方が規定値なので、明示しなくても結果は同じだが例として記載
OpenReportメソッド
Docmd.OpenReport "R_KEN_ALL",acViewPreview '印刷プレビュー画面で開く
Docmd.OpenReport "R_KEN_ALL" '第2引数が規定値の「acViewNormal」つまり印刷が実行される
OpenFormメソッド★★今回の主役
Docmd.OpenForm "F_KEN_ALL",acNormal,,,acFormReadOnly,acDialog '読み取り専用かつダイアログ画面で開く
ケースごとの記述例
※以下の例における前提条件:現フォーム「F_KEN_ALL1」から別フォーム「F_KEN_ALL2」を開く現フォームのボタン1をクリックで別フォームを開く
Private Sub btn1_Click() 'フォーム「F_KEN_ALL1」のフォームモジュールに記載
Docmd.OpenForm "F_KEN_ALL2"
End Sub
現フォーム内のラベル「郵便番号」が空白でない時だけ、現フォームのボタン1をクリックで別フォームを開く
Private Sub btn1_Click() 'フォーム「F_KEN_ALL1」のフォームモジュールに記載
If Not IsNull(Me.郵便番号.Value) Then
Docmd.OpenForm "F_KEN_ALL2",,,"郵便番号 = " & Me.郵便番号.Value '第4引数のフィルタ条件式で指定したレコードの内容を別フォーム上に表示
End If
End Sub
現フォームがアクティブになるよう切り替える
Private Sub btn1_Click() 'フォーム「F_KEN_ALL2」のフォームモジュールに記載
Docmd.SelectObject acForm "F_KEN_ALL1"
End Sub
【Screen.ActiveForm】アクティブなフォームの参照
▼おもなActiveプロパティ▼
Screen.ActiveForm
Screen.ActiveReport
Screen.ActiveControlアクティブになっている別フォーム上のボタン2で自身(別フォーム)を閉じる
Private Sub btn2_Click() 'フォーム「F_KEN_AL2」のフォームモジュールに記載
Docmd.Close acForm, Screen.ActiveForm.Name
End Sub
ほんとうは、実際のフォームをキャプチャするのがよいのだが、め...