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

VBA统计工作表行数跨工作簿写入时报1004错误求助

问题排查与修复方案

报错核心原因

1004错误出在last_row = SalesWs.Cells(Rows.Count, 6).End(xlUp).Row这行,核心问题是**Rows.Count没有明确指定所属工作表**:
未指定工作表时,Rows.Count默认读取当前激活的工作表的最大行数,如果当前激活的表和SalesWs的格式版本不一致(比如一个是Excel 97-2003格式的65536行,一个是新版格式的1048576行),SalesWs.Cells(超大行数,6)就会超出该工作表的行数范围,抛出对象定义错误。另外后续写入TrackerWs的两行代码里的Rows.Count也存在同样的隐式调用问题,后续也可能触发报错。

额外逻辑修正

你的需求是统计从第6行开始的有效行数,原代码直接取的是F列最后一行的行号,如果有效数据最后一行小于6的话,会得到不符合预期的结果,需要补充边界判断。

修正后的完整代码

Sub StoreDateAndRowCount()
    Dim SalesWb As Workbook, TrackerWb As Workbook
    Set SalesWb = Workbooks("Trial 30.08.2021.xlsm")
    Set TrackerWb = Workbooks("Tracker.xlsm")
    
    Dim SalesWs As Worksheet, TrackerWs As Worksheet
    Set SalesWs = SalesWb.Sheets("Sales Volumes")
    Set TrackerWs = TrackerWb.Sheets("Tracker ET")
    
    Dim last_row As Long, valid_row_count As Long
    Dim LDate As Date
    LDate = Date
    
    ' 明确指定Rows.Count属于SalesWs,避免跨表引用错误
    last_row = SalesWs.Cells(SalesWs.Rows.Count, 6).End(xlUp).Row
    
    ' 计算从第6行开始的有效行数,补充边界判断
    valid_row_count = IIf(last_row >= 6, last_row - 5, 0)
    
    ' 写入Tracker时也明确指定Rows.Count所属工作表
    With TrackerWs
        .Range("B" & .Rows.Count).End(xlUp).Offset(1).Value = valid_row_count
        .Range("A" & .Rows.Count).End(xlUp).Offset(1).Value = LDate
    End With
End Sub

修改点说明

  • 所有Rows.Count前都加上了所属工作表的引用,确保取到的是对应工作表的最大行数,避免跨版本、跨表引用错误
  • 补充了有效行数的计算逻辑:如果最后一行行号≥6,有效行数=最后一行行号-5(因为前5行是空白行,第6行是第一行有效行),否则返回0
  • 修正了日期变量的类型定义:原代码声明了未使用的Date1变量,且LDate未声明类型,改为直接声明LDate As Date符合VBA开发规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:48:02