VBA运行时错误3021-无当前记录

艾丽莎·迪·佛尔科(Elisha Di Folco)

我正在尝试将多个数据集导出到各自的新Excel文件。

   Public Sub MultipleQueries()

Dim i As Integer
Dim Mailer As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim qdf As QueryDef

Set Mailer = CurrentDb
Set rs1 = Mailer.OpenRecordset("MailerData")
Set qdf = Mailer.CreateQueryDef("CCspl", "PARAMETERS CostCentre Text ( 255 );SELECT MonthlyFteData.CostCentre, MonthlyFteData.EmpName, MonthlyFteData.Workload FROM MonthlyFteData WHERE (((MonthlyFteData.CostCentre)=[CostCentre]))")

For i = 0 To rs1.RecordCount - 1

qdf.Parameters("CostCentre") = rs1.Fields("CostCentre")

    Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets(1)

Set rs2 = qdf.OpenRecordset()

With rs2

oSheet.Range("A2").CopyFromRecordset rs2
oBook.SaveAs "C:\Users\807140\Downloads\" & rs2.Fields("CostCentre") & ".xlsx"

rs2.Close
oExcel.Quit
Set oExcel = Nothing

End With

rs1.MoveNext
Next i

qdf.Close
Set qdf = Nothing
rs1.Close

End Sub

但是我收到运行时错误3021-没有当前记录

我用

oSheet.Range("A2").CopyFromRecordset rs2
oBook.SaveAs "C:\Users\807140\Downloads\" & rs2.Fields("CostCentre") & ".xlsx"

Debug.Print .RecordCount

而且我确实得到了rs2的适当记录数。

如何修复我的代码以消除错误?

dbmitch

这段代码有@Andre和Ryan指出的一些问题。

您没有在重用Excel对象,而是在重新定义仅应定义一次的对象,使用永远不会被引用的With,因此它只会增加代码,而无济于事。

您还将在代码中动态创建参数查询-而不是在SQL中创建参数查询并将其保存以按名称重用。

您可以尝试这段重写的代码,看看它是否更适合您。我确实相信预定义查询是更好的方法-然后我将在循环内关闭查询,并在每次启动时将其重置。我刚刚看到,当在循环内部重用querydef而不重置它们时,会发生奇怪的事情。

无论如何尝试一下-并在导致错误的特定行上报告

Public Sub MultipleQueries()

    Dim i       As Integer
    Dim Mailer  As Database
    Dim rs1     As Recordset
    Dim rs2     As Recordset
    Dim qdf     As QueryDef

    Dim oExcel  As Object
    Dim oBook   As Object
    Dim oSheet  As Object

    ' Only Open and Close Excel once
    Set oExcel = CreateObject("Excel.Application")

    Set Mailer = CurrentDb
    Set rs1 = Mailer.OpenRecordset("MailerData")

    ' Ideally you'd put this create query ahead of time instead of dynamically
    Set qdf = Mailer.CreateQueryDef("CCspl", "PARAMETERS CostCentre Text ( 255 );SELECT MonthlyFteData.CostCentre, MonthlyFteData.EmpName, MonthlyFteData.Workload FROM MonthlyFteData WHERE (((MonthlyFteData.CostCentre)=[CostCentre]))")

    Do Until rs1.EOF

        ' Sometimes weird things happen when you reuse querydef with new parameters
        qdf.Parameters("CostCentre") = rs1.Fields("CostCentre")
        Set rs2 = qdf.OpenRecordset()

        If Not rs2.EOF Then
            Set oBook = oExcel.Workbooks.Add
            Set oSheet = oBook.Worksheets(1)

            oSheet.Range("A2").CopyFromRecordset rs2
            oBook.SaveAs "C:\Users\807140\Downloads\" & rs2.Fields("CostCentre") & ".xlsx"
        Else
            Msgbox "No Data Found for: " & rs1.Fields("CostCentre") 
            Exit Do
        End If

        rs2.Close

        Set rs2 = Nothing
        Set oBook = Nothing     
        Set oSheet = Nothing        

        rs1.MoveNext
    Loop

    oExcel.Quit

    qdf.Close
    rs1.Close
    Mailer.Close

    Set qdf = Nothing
    Set rs1 = Nothing
    Set Mailer = Nothing

    ' Remove Excel references
    Set oBook = Nothing
    Set oSheet = Nothing
    Set oExcel = Nothing

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

VBA代码的重复记录运行时错误

来自分类Dev

VBA代码的重复记录运行时错误

来自分类Dev

MS ACCESS VBA运行时错误“ 3021”;与.MoveNext

来自分类Dev

当我填写所有字段时,出现错误3021:无当前记录

来自分类Dev

在运行时打开无模式表单 - VBA Excel

来自分类Dev

编译时constexpr错误,但运行时无开销

来自分类Dev

无堆栈Scala播放框架运行时错误

来自分类Dev

无堆栈Scala播放框架运行时错误

来自分类Dev

运行时错误'-2147352567(80020009)'没有当前记录MySQL后端DAO记录集

来自分类Dev

运行时错误'-2147352567(80020009)'没有当前记录MySQL后端DAO记录集

来自分类Dev

记录运行时修改

来自分类Dev

程序运行时记录

来自分类Dev

程序无输出(预期为408行),无编译或运行时错误

来自分类Dev

在crontab中运行时python日志记录模块无输出

来自分类Dev

Excel VBA运行时错误'424'对象需要将单元格内容替换为四舍五入到当前值的两位小数

来自分类Dev

从xargs运行时,如何避免sed出现“无输入文件”错误?

来自分类Dev

在运行时保存当前状态

来自分类Dev

运行时错误'-2032465766(86db089a)”“当前已禁用请求的操作。”

来自分类Dev

将函数移出当前类后,AsyncTask doinBackground运行时错误

来自分类Dev

rs.movenext 不起作用 - 运行时错误 3021

来自分类Dev

如何记录运行时异常?

来自分类Dev

在运行时编辑动态记录

来自分类Dev

使用包含使用EF查询记录时出现多个运行时错误

来自分类Dev

运行时错误“ 3326”,此记录集不可更新

来自分类Dev

VBA:运行时错误“ 91”?

来自分类Dev

Excel VBA运行时错误1004

来自分类Dev

VBA宏上的运行时错误

来自分类Dev

运行时错误400 VBA

来自分类Dev

运行时错误2471访问VBA

Related 相关文章

  1. 1

    VBA代码的重复记录运行时错误

  2. 2

    VBA代码的重复记录运行时错误

  3. 3

    MS ACCESS VBA运行时错误“ 3021”;与.MoveNext

  4. 4

    当我填写所有字段时,出现错误3021:无当前记录

  5. 5

    在运行时打开无模式表单 - VBA Excel

  6. 6

    编译时constexpr错误,但运行时无开销

  7. 7

    无堆栈Scala播放框架运行时错误

  8. 8

    无堆栈Scala播放框架运行时错误

  9. 9

    运行时错误'-2147352567(80020009)'没有当前记录MySQL后端DAO记录集

  10. 10

    运行时错误'-2147352567(80020009)'没有当前记录MySQL后端DAO记录集

  11. 11

    记录运行时修改

  12. 12

    程序运行时记录

  13. 13

    程序无输出(预期为408行),无编译或运行时错误

  14. 14

    在crontab中运行时python日志记录模块无输出

  15. 15

    Excel VBA运行时错误'424'对象需要将单元格内容替换为四舍五入到当前值的两位小数

  16. 16

    从xargs运行时,如何避免sed出现“无输入文件”错误?

  17. 17

    在运行时保存当前状态

  18. 18

    运行时错误'-2032465766(86db089a)”“当前已禁用请求的操作。”

  19. 19

    将函数移出当前类后,AsyncTask doinBackground运行时错误

  20. 20

    rs.movenext 不起作用 - 运行时错误 3021

  21. 21

    如何记录运行时异常?

  22. 22

    在运行时编辑动态记录

  23. 23

    使用包含使用EF查询记录时出现多个运行时错误

  24. 24

    运行时错误“ 3326”,此记录集不可更新

  25. 25

    VBA:运行时错误“ 91”?

  26. 26

    Excel VBA运行时错误1004

  27. 27

    VBA宏上的运行时错误

  28. 28

    运行时错误400 VBA

  29. 29

    运行时错误2471访问VBA

热门标签

归档