2011-07-25 31 views
0

我试图开发一个子程序,我可以通过不同的变量来节省一些时间在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”应用程序定义或对象 - 定义的错误。我很努力地看到它出错的地方。有什么想法吗?

+0

你的'Form'对象来自你的第一个子对象吗? – JMax

回答

0

如果使用 呼叫openCaseFORM(我会发生什么,我!listPreAn ?

,如果作为第二个参数,你不使用它反正你不使用列表,列表框,那么

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子句你喜欢。

相关问题