访问编译错误:参数不是可选的
Posted
技术标签:
【中文标题】访问编译错误:参数不是可选的【英文标题】:Access Compile Error: Argument not Optional 【发布时间】:2012-12-26 15:14:10 【问题描述】:我有一个访问数据库,这与我之前提出的问题类似,带有一个下拉列表和一个子表单。我希望能够从下拉列表中选择一个选项,并让它在下面的子表单中打开相应的子表单。这是我的代码...
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 新手
【问题讨论】:
哪里出错了? 在 cmbSelectFrms_AfterUpdate 事件中 您是手动写出cmbSelectFrms_AfterUpdate
还是仅使用下拉菜单(或表单属性)来创建事件触发器?有时事件触发器具有参数(that are not optional .. hence your error message!)
,如果您没有从 VBE 中的下拉菜单或属性框中的事件处理程序构建它们,您将不会意识到它们
我使用属性框中的事件处理程序来定位事件。我尝试坚持你提到的任何一种结构,因为我仍然不太确定自己是否可以访问。
什么是selectSubform
?
【参考方案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 添加到每个代码模块将有助于您识别问题。
【讨论】:
以上是关于访问编译错误:参数不是可选的的主要内容,如果未能解决你的问题,请参考以下文章