传递表单和列表框

时间:2011-07-25 10:24:20

标签: ms-access 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

然而,在尝试它时,我得到运行时错误'2465'应用程序定义或对象定义的错误。我很难看出它出了什么问题。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您使用会发生什么 打电话给openCaseFORM(我,我!listPreAn ?

如果您不使用列表作为列表框作为第二个参数,那么您仍然没有使用它。

答案 1 :(得分:0)

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

  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

这两个都假设列表框是一个简单的(即不是多选)。

我建议重写这样更有意义:

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

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