2012-12-24 107 views
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 
+0

请发表您已经尝试的代码?我们可以通过这种方式获得更多帮助。否则,我们所能做的就是问你更多的问题...... –

回答

1

写三个值中的下拉为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 
2

这是粗糙,但它应该给你一个开始。您可以使用所需子窗体的字符串名称来设置子窗体容器的源对象。一旦你完成了,你可以获取MS Access定义的基本Form Class的引用,并使用其中定义的属性和方法。

如果你愿意的话,你也可以获取你特定表单的引用,尽管这会变得更加复杂。

从这里开始,你需要稍微玩一下,才能让它按照你想要的方式行事。

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