マスター DB によってクエリされるスレーブ DB が多数あります。マスター DB のフォーム内から、スレーブ DB を監視し、そのフォームとすべてにすばやくアクセスできるようにしたいと考えています。
各スレーブ DB の MS Access ウィンドウをそのタブの各ページに埋め込んで、マスター DB のフォームにタブ コントロールを簡単に作成できることを望んでいました。
これは可能ですか?
サブフォーム内にアプリケーション ウィンドウを挿入することはできません。他のデータベースのフォームを使用するには、そこに標準モジュールを作成し、フォーム オブジェクトを返すパブリック関数を挿入します。したがって、マスター データベースで直接開きたいスレーブ データベースにフォーム "frmTest" がある場合は、次のようなパブリック関数を記述できます。
Public Function GetFrmTest1() As Form_frmTest
Set GetFrmTest1 = New Form_frmTest
End Function
このメソッドは、モジュールにコードがある場合にのみ機能します。そうでない場合は、「Form_frmTest」の代わりに汎用の「Access.Form」をタイプとして使用できます。
master db で、このフォームを開くことができます。これを行うには、VBA エディターで参照ウィンドウを開き、[参照] をクリックして、スレーブ データベースの場所を検索し、参照として追加します。
master db では、次のコマンドで開くことができます:
Dim frm As Access.Form ' Here you can only use the generic Form object
Set frm = GetFrmTest1
frm.Visible = True
これにより、マスター データベースで外部フォームが開きます。しかしもちろん、フォームオブジェクトをスレーブデータベースのマスターデータベースに返す関数が必要です。次のように、1 つの関数で任意のフォームを返すこともできます。
Public Function GetForm(strFormName As String) As Access.Form
Select Case strFormName
Case "frmTest1"
Set GetForm = Form_frmTest1
Case "frmTest2"
Set GetForm = Form_frmTest2
...
End Select
End Function
その結果、マスター データベース内の各スレーブ データベースのフォームを使用できますが、ナビゲーションは自分で行う必要があります。
別の可能性は、マスター データベースに新しいフォームを作成し、リンクされたテーブルのみをスレーブ データベースに追加して、一部のデータのみを監視することです。ここでの利点は、データが表示されたときに何をしたいかを自分で決定できることです。他の解決策は、コンテンツを制御せずに、スレーブ データベースですべての「ホーム機能」を使用してフォームを開くことです。