Ms access 传递表单和列表框

Ms access 传递表单和列表框,ms-access,vba,Ms Access,Vba,我正在尝试开发一个sub,在VBA Access中创建许多不同类型的列表框时,我可以传递不同的变量来节省时间。我得出以下结论: Public Sub openCASEFORM(f As Form, list As ListBox) DoCmd.OpenForm f, , , "[FileID]=" & f.list End Sub 我称之为: Private Sub listPreAn_Click() Call openCASEFORM(Me, listPreAn) End Sub

我正在尝试开发一个sub,在VBA Access中创建许多不同类型的列表框时,我可以传递不同的变量来节省时间。我得出以下结论:

Public Sub openCASEFORM(f As Form, list As ListBox)
DoCmd.OpenForm f, , , "[FileID]=" & f.list
End Sub
我称之为:

Private Sub listPreAn_Click()
Call openCASEFORM(Me, listPreAn)
End Sub
然而,当尝试它时,我得到一个运行时错误“2465”应用程序定义的错误或对象定义的错误。我努力想知道哪里出了问题。有什么想法吗?

如果使用 调用openCaseFORM(我,我!listPreAn ?


当然,如果不使用list as Listbox作为第二个参数,那么无论如何也不会使用它。

您的代码编写得非常糟糕,因为您正在传递对象,但您需要使用字符串来完成这项工作。我将其重写如下:

  Public Sub openCASEFORM(f As String, list As String)
    DoCmd.OpenForm f, , , "[FileID]=" & f(list)
  End Sub
或者,或者:

  Public Sub openCASEFORM(f As String, list As ListBOx)
    DoCmd.OpenForm f, , , "[FileID]=" & list.Value
  End Sub
这两种方法都假设listbox是一个简单的列表框(即,不是multiselect)

我认为改写以下内容更有意义:

  Public Sub openCASEFORM(ByVal strFormName As String, ByVal strCriteria As String)
    DoCmd.OpenForm strFormName, , , strCriteria
  End Sub

这样,您就可以传递任意您喜欢的WHERE子句。

您的
表单
对象在第一个子类中来自哪里?