【AccessVBA】サブフォームの表示をVBAで切り替える

Accessによるアプリケーション開発において、必要な機能をどの画面に配置するかを考えるのと同時に、その画面をどう遷移させるかも考えます。時にはポップアップでフォームを開いたり、その際元のフォームを閉じたり、あるいは開いたままにしたり。

そんな選択肢のひとつとして、サブフォームという機能を使うことができます。

今回はそのやり方をいくつかご紹介します。

  1. ソースコードでサブフォームのソースを変更
  2. 実用例1~親フォーム(メインメニュー画面)のコマンドボタンで切り替え
  3. 実用例2~サブフォーム側からの切り替え

それではひとつずつ見ていきましょう。

1.ソースコードでサブフォームのソースを変更

これは非常に簡単で、以下の1行で実現可能です。

親フォームのサブフォームオブジェクト.SourceObject = “サブフォーム名”

「親フォームのサブフォームオブジェクト」の部分は実際にこの処理をどこで動かすのかによって書き方が変わりますので、以下の具体例で紹介します。

2.実用例1~親フォーム(メインメニュー画面)のコマンドボタンで切り替え

メインメニュー画面の左側に機能を呼び出すボタンを作り、画面右側にサブ機能を表示するようなレイアウトを作る場合のやり方です。

青枠で囲われたエリアがサブフォームを表示するエリアで、ここに「サブフォーム/サブレポート」コントロールを配置しています。

サブフォーム/サブレポートコントロールの名前はサブフォームウィンドウとしています。このサブフォームウィンドウのソースオブジェクトを、画面左側のコマンドボタンで切り替える仕組みです。

メニュー1ボタンのクリックイベントに以下のコードを記述してボタンを押してみます。

Private Sub メニュー1_Click()
    Me.サブフォームウィンドウ.SourceObject = "サブフォーム1"
End Sub

ここにある「サブフォーム1」はあらかじめ用意しておいたフォームです。実際には売上登録画面であったり、マスタメンテナンス画面であったり、必要なものを準備します。

フォームビューで表示してボタンを押してみると、無事青枠の中がサブフォーム1に変わりました。

3.実用例2~サブフォーム側からの切り替え

今度はサブフォーム側のイベントでソースオブジェクトを切り替える方法です。サブフォーム側の処理の流れで機能を差し替えたい場合もあるでしょうし、キャンセルボタンを配置してサブフォームを閉じたい(機能がないダミーのフォームに切り替えたい)場合もあるかも知れません。

ここではダミーフォームへの切り替えを行います。あらかじめ用意したダミーフォームの名前を「ダミーサブフォーム」としておきます。また、サブフォーム1にキャンセルボタンを配置して、クリックイベントに以下のコードを書いておきます。

Private Sub キャンセルボタン_Click()
    Forms!フォーム1.サブフォームウィンドウ.SourceObject = "ダミーサブフォーム"
End Sub

親フォーム以外から親フォームのサブフォームコントロールを操作することができました。