Forms 访问子窗体可见性

Forms 访问子窗体可见性,forms,vba,ms-access,subforms,Forms,Vba,Ms Access,Subforms,我有一个访问表单,其中包含从表中填充的表单名称的下拉列表。当有人从下拉列表中选择一个特定项目时,我希望能够显示相应的子窗体中的一个。例如,我在下拉列表中有表格1、表格2、表格3。我选择表单2,子表单2出现。我尝试访问VBA中的subforms visible属性,但出现了多个错误,而且从未完全起作用。有人能帮忙吗 这是填充下拉列表的代码: Private Sub Form_Load() Dim dba As Database Dim rst As Recordset Dim SQL As St

我有一个访问表单,其中包含从表中填充的表单名称的下拉列表。当有人从下拉列表中选择一个特定项目时,我希望能够显示相应的子窗体中的一个。例如,我在下拉列表中有表格1、表格2、表格3。我选择表单2,子表单2出现。我尝试访问VBA中的subforms visible属性,但出现了多个错误,而且从未完全起作用。有人能帮忙吗

这是填充下拉列表的代码:

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 

这是粗糙的,但它应该给你一个开始。可以使用所需子窗体的字符串名称设置子窗体容器的源对象。完成此操作后,您可以获取对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

在下拉列表中写入三个值,分别为Form1、Form2、Form3(或任何您的表单名称),然后编码:

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

With Me.    

Select case Me.DropDownName.Value
case "Form1" 
 With Me.MainFormName.Form
 .Form1.visbile = true 
 .Form2.visbile = false
 .Form3.visbile = false
 End With 
case "Form2" 
 With Me.MainFormName.Form
 .Form1.visbile = false 
 .Form2.visbile = true
 .Form3.visbile = false
 End With
  case "Form3" 
 With Me.MainFormName.Form
 .Form1.visbile = false 
 .Form2.visbile = false
 .Form3.visbile = true
 End With
  End Select  
  End With 

请发布您尝试过的代码?我们可以通过这种方式提供更多帮助。否则,我们只能问你更多的问题。。。