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

使用Range复制第24条记录触发Run-time error 1004的技术咨询

解决Run-time Error 1004:Offset+Resize复制第24条记录时出错的问题

这问题我之前帮同事排查过类似的,大概率是单元格引用边界问题或者隐藏/合并单元格导致的Range解析异常,给你几个具体的排查和解决方向:

1. 先确认复制范围是否超出工作表边界

你用cell.Offset(, -2).Resize(, 15)构造复制范围时,很可能在第24条记录时,这个范围的列号超出了Excel的有效列范围(Excel最小列是1,最大是16384)。比如如果cell所在列是第2列,Offset(, -2)会指向不存在的第0列,直接触发1004错误。

建议在出错语句前加两行调试代码,输出当前操作的范围地址:

Debug.Print "当前Cell地址:" & cell.Address
Debug.Print "要复制的范围:" & cell.Offset(, -2).Resize(, 15).Address

运行宏后打开VBA的“立即窗口”(Ctrl+G),查看输出的范围是否有列号小于1的情况——这就是问题根源。

2. 排查第24行的隐藏列/合并单元格

虽然你说第24-26行无差异,但合并单元格或者隐藏列会干扰Offset+Resize的Range解析逻辑,而EntireRow.Copy因为直接取整行,不受这些因素影响。

可以试试:

  • 选中第24行,检查是否存在合并单元格(取消合并后再测试);
  • 取消工作表所有列的隐藏(全选工作表→右键列→取消隐藏),再运行宏。

3. 改用更稳定的Range引用方式

如果不想纠结Offset的相对引用问题,直接用行号+固定列号构造复制范围会更可靠。比如假设你要复制从cell左移2列开始的15列,直接写成:

Dim targetRow As Long
targetRow = cell.Row
' cell.Column-2是起始列,+14是结束列(凑够15列范围)
Range(Cells(targetRow, cell.Column - 2), Cells(targetRow, cell.Column - 2 + 14)).Copy

这种方式比Offset+Resize更直观,也更容易排查边界问题。

4. 排除工作表保护/权限问题

虽然可能性较低,但可以临时取消工作表保护(如果有的话)再测试,避免因部分区域保护导致的复制权限问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:34