繁体   English   中英

访问编译错误:参数不是可选的

[英]Access Compile Error: Argument not Optional

我有一个访问数据库,这类似于我之前问过的一个问题,有一个下拉菜单和一个子表单。 我希望能够从下拉列表中选择一个选项,并让它在下面的子窗体中打开相应的子窗体。 这是我的代码...

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

有什么建议么? 刚接触 VBA

您的函数 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 将大大有助于您识别问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM