对象变量或With块变量未设置Access vba

时间:2017-06-08 15:00:36

标签: vba ms-access access-vba

我在Access中使用了几个表, CTOL CTOL_Asbuilt 。我正在尝试运行查询以使用VBA代码将这两个表连接在一起。我在Access中运行查询,它可以工作。我正在使用DAO作为数据库库从本地Access数据库检索数据(代码与数据库在同一个数据库项目中),我是VBA Access脚本的新手。

SELECT CTOL.ID, CTOL.BOM_PART_NAME, CTOL.CII, CTOL.[PART FIND NO], CTOL.CSN,
       CTOL.AFS, CTOL.EQP_POS_CD, CTOL.LCN, CTOL.POS_CT, CTOL.SERIAL_NO, 
       CTOL.PART_NO_LLP, [CTOL_Asbuilt].[PART-SN], [CTOL_Asbuilt].[PART-ATA-NO], 
       [CTOL_PW-E750207_Asbuilt].[PW-PART-NO]
FROM CTOL LEFT JOIN [CTOL_Asbuilt] ON CTOL.[PART FIND NO] = [CTOL_Asbuilt].[PART-ATA-NO];

这是下面的代码:

Option Compare Database
Option Explicit

'Const adOpenStatic = 3
'Const adLockOptimistic = 3

Function queryDatabase()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rsQuery As DAO.Recordset


Dim part_find_no() As String
Dim eqp_pos() As Integer
'Dim strSQL As String
Dim i As Integer
Dim j As Integer
'Set objConnection = CurrentDb.OpenRecordset("CTOL")

Set db = CurrentDb

Set rsQuery = db.OpenRecordset("SicrProcess", dbOpenDynaset)

rs.Close
db.Close

Set rs = Nothing
Set db = Nothing

End Function

当我使用调用函数的宏运行此代码时,我收到以下错误:

运行时错误'91':

  

对象变量或未设置块变量

我正在尝试使用带有查询的代码循环遍历两个字段,并在 PART FIND NO 条目与最后一个匹配时递增 EQP_POS_CD 字段的值(否则,它只会移动到下一条记录,直到它到达结果集的末尾)。我想测试运行此查询以确保代码通过在Access中手动运行查询来检索输出的结果。

你能帮我修复这个错误,以便我可以运行我的代码来检索数据吗?谢谢!

2 个答案:

答案 0 :(得分:1)

rs.Close

您无法关闭未打开的内容。也许你的意思是rsQuery.Close

答案 1 :(得分:0)

打开记录集并循环记录。

Sub queryDatabase()
    On Error GoTo ErrProc

    Dim db As DAO.Database
    Set db = CurrentDb

    Dim qdf As DAO.QueryDef
    Set qdf = db.QueryDefs("SicrProcess") 'set your query name here

    Dim rs As DAO.Recordset
    Set rs = qdf.OpenRecordset(dbOpenDynaset)

    Dim part_find_no() As String
    Dim eqp_pos() As Integer, i As Integer

    If rs.EOF Then GoTo Leave
    rs.MoveLast
    rs.MoveFirst

    For i = 1 To rs.RecordCount

        '...
        'Do work here
        '...

        rs.MoveNext
    Next i

Leave:
    On Error Resume Next
    rs.Close
    Set rs = Nothing
    qdf.Close
    Set qdf = Nothing
    Set db = Nothing
    On Error GoTo 0
    Exit Sub

ErrProc:
    MsgBox Err.Description, vbCritical
    Resume Leave
End Sub