使用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
相关产品推荐
相关产品推荐

