我有一个访问数据库,这类似于我之前提出的问题,带有下拉列表和子表单。我希望能够从下拉列表中选择一个选项,并在下面的子表单中打开相应的子表单。这是我的代码......
Option Compare Database
Option Explicit
Private Sub btnCloseHRForms_Click()
DoCmd.Close
End Sub
Private Sub cmbSelectFrms_AfterUpdate()
Select Case selectSubform
Case 1
Forms!frm_HRForms!subformHRForms.Form!subform1.Visible = True
Case 2
Forms!frm_HRForms!subformHRForms.Form!subform2.Visible = True
Case 3
Forms!frm_HRForms!subformHRForms.Form!subform3.Visible = True
End Select
End Sub
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
Function selectSubform(ID)
Dim dbacurrent As Database
Dim rstcurrent As Recordset
Dim SQL As String
Set dbacurrent = CurrentDb
SQL = "SELECT * FROM tbl_Forms WHERE ID = " & ID
Set rstcurrent = dbacurrent.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)
selectSubform = rstcurrent.Fields("ID")
Set dbacurrent = Nothing
Set rstcurrent = Nothing
End Function
有什么建议吗? Access VBA新手
答案 0 :(得分:1)
你的函数selectSubform(ID)需要传递一个ID参数,而你没有传递一个。定义函数时:
Function selectSubform(ID)
' ... Do some stuff
selectSubform = SomeValue
End Function
您告诉编译器需要名为ID的参数。
另外,我强烈建议您在每个代码模块的顶部放置一个Option Explicit语句,并在编辑器中打开Option Explicit选项。这将要求您指明数据类型。事实上,我们不知道期望什么数据类型作为ID参数,并且不知道您的函数返回了什么数据类型(尽管在Select Case语句中将其用作表观整数)。 做一些假设,我会尝试以下更改(我现在无法测试,也不能与你的其余代码说话)。
我在这里假设组合框中的选择是相应子表单的ID。如果没有,您可能需要为我们澄清ID参数的来源):
Private Sub cmbSelectFrms_AfterUpdate()
Select Case selectSubform(Me.cmbSelectForms)
Case 1
Forms!frm_HRForms!subformHRForms.Form!subform1.Visible = True
Case 2
Forms!frm_HRForms!subformHRForms.Form!subform2.Visible = True
Case 3
Forms!frm_HRForms!subformHRForms.Form!subform3.Visible = True
End Select
End Sub
这里可能还有其他问题。但是,将VBA IDE设置为需要显式变量声明并向每个代码模块添加Option Explicit将大大有助于您识别问题。