You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access导出记录至Excel时偶发Runtime错误1004排查求助

问题分析与解决方案

核心错误原因

出现Runtime error '1004' Method 'Rows' of object '_Global' Failed的关键原因是未明确限定Rows所属的Excel对象。在Access VBA环境中,Rows.Count默认会指向Access的内置对象,而非你创建的Excel应用实例,当Access和Excel对象模型出现冲突时,就会触发这个无规律的错误。

代码修复步骤

1. 修正出错的行号获取代码

将出错的代码:

lrow = xlws.Cells(Rows.Count, 1).End(xlUp).Row

修改为明确限定Excel工作表对象的版本:

lrow = xlws.Cells(xlws.Rows.Count, 1).End(xlUp).Row

或者更严谨地使用Excel应用实例限定:

lrow = xlws.Cells(xlApp.Rows.Count, 1).End(xlUp).Row

2. 修复逻辑错误的双层循环

你的遍历代码存在**双层嵌套Do Until rst.EOF**的严重问题:第一次进入外层循环后,内层循环会直接把记录集rst移动到EOF位置,外层循环会因为rst.EOF为True而直接退出,同时还会导致后续对rst的操作失效,这也是可能引发偶发错误的隐性因素。删除外层循环,保留内层循环即可:

i = 2
Do Until rst.EOF
    dblTotHr = rst!Hours
    
    xlws.Range("a" & i).Value = rst!A
    xlws.Range("b" & i).Value = rst!B
    xlws.Range("c" & i).Value = rst!C
    
    i = i + 1
    rst.MoveNext
Loop

3. 完善对象清理与错误处理

为了避免Excel进程残留和偶发异常,建议添加错误捕获,并确保Excel对象正确释放:

On Error GoTo Cleanup

' 你的导出代码...

Cleanup:
    xlApp.Visible = True
    If Not rst Is Nothing Then
        If rst.State = adStateOpen Then rst.Close
        Set rst = Nothing
    End If
    If Not xlws Is Nothing Then Set xlws = Nothing
    If Not xlwb Is Nothing Then Set xlwb = Nothing
    If Not xlApp Is Nothing Then
        xlApp.Quit ' 如需关闭Excel,否则注释此行
        Set xlApp = Nothing
    End If
    Set xlrng = Nothing
    Set rst1 = Nothing

额外优化建议

  • 尽量避免逐单元格写入数据,可将记录集直接复制到Excel范围,提升效率并减少出错概率:
    xlws.Range("A2").CopyFromRecordset rst
    
  • 声明变量时添加Option Explicit,强制变量声明,避免因未声明变量导致的隐性错误。

内容的提问来源于stack exchange,提问作者SamwiseVB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:05:24