2

テーブルから入力されたフォーム名のドロップダウン リストを含むアクセス フォームがあります。誰かがドロップダウンから特定の項目を選択すると、対応するサブフォームの 1 つを表示できるようにしたいと考えています。たとえば、ドロップダウンにフォーム 1、フォーム 2、フォーム 3 があります。Form 2 を選択すると、サブフォーム 2 が表示されます。VBA でサブフォームの表示可能なプロパティにアクセスしようとしましたが、複数のエラーが発生し、まったく機能しませんでした。誰でも助けることができますか?

これは、ドロップダウンに入力するコードです。

Private Sub Form_Load()

Dim dba As Database
Dim rst As Recordset
Dim SQL As String

Set dba = CurrentDb
Set rst = dba.OpenRecordset("tbl_Forms", dbOpenDynaset, dbSeeChanges)
SQL = "SELECT ListName FROM tbl_Forms"
Set rst = dba.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)

Set rst = Nothing
Set dba = Nothing
End Sub

そして、私が試したサブフォームの可視性のために:

forms!mainform.Form1.visbile = false 
forms!mainform.Form2.visbile = false
forms!mainform.Form3.visbile = false

Select case dropdown
case 1 
forms!mainform.Form1.visbile = true 
forms!mainform.Form2.visbile = false
forms!mainform.Form3.visbile = false
case 2
forms!mainform.Form1.visbile = false
forms!mainform.Form2.visbile = true
forms!mainform.Form3.visbile = false
case 3 
forms!mainform.Form1.visbile = false
forms!mainform.Form2.visbile = false
forms!mainform.Form3.visbile = true
end select 
4

2 に答える 2

2

これは大雑把ですが、手がかりになるはずです。目的のサブフォームの文字列名を使用して、サブフォーム コンテナーのソース オブジェクトを設定できます。これが完了すると、MS Access で定義されているベース フォーム クラスへの参照を取得し、そこで定義されているプロパティとメソッドを使用できます。

必要に応じて、特定のフォームへの参照を取得することもできますが、これはより複雑になります。

ここからは、希望どおりに動作させるために、少し操作する必要があります。

Option Compare Database
Option Explicit

Private currentSubformReference As Form


Private Sub cboSubForms_AfterUpdate()
    LoadSubform (cboSubForms)
    currentSubformReference.DividingLines = False
    currentSubformReference.ControlBox = False
    '  . . . Etc
End Sub


Private Sub LoadSubform(ByVal SubformName As String)

    'Set the SourceObject property of the subform/subreport
    ' container object on your form:
    Me.sfmContainer.SourceObject = SubformName

    ' Grab a reference to the Form that is used as the
    ' SourceObject (this will only get you access to the
    ' properties exposed by the MS Access Form Class):
    Set currentSubformReference = Me.sfmContainer.Form

End Sub
于 2012-12-24T15:22:15.833 に答える