跨工作表引用单元格区域触发Runtime Error 1004问题排查
问题原因与解决方案
核心问题:未限定Cells的父对象
当你使用Range(Cells(1, 1), Cells(1, 3))时,Cells方法若未指定所属工作表,默认会指向当前激活的工作表。当Sheet1处于激活状态时,Cells(1,1)和Cells(1,3)实际是Sheet1的单元格,而你试图用Sheet2的Range对象引用Sheet1的单元格,这就触发了1004错误——VBA不允许跨工作表构建Range对象。
而用字符串地址Range("A1:C1")时,地址直接绑定到前面指定的Sheet2,因此不会出现问题。
修复代码
给Cells明确指定父工作表,确保和Range的父对象一致:
ThisWorkbook.Worksheets("Sheet2").Range( _ ThisWorkbook.Worksheets("Sheet2").Cells(1, 1), _ ThisWorkbook.Worksheets("Sheet2").Cells(1, 3) _ ).Copy
为简化代码、提升可读性,可先将工作表对象赋值给变量:
Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet2") ws.Range(ws.Cells(1, 1), ws.Cells(1, 3)).Copy
关于Worksheets对象属性报错的补充
如果Worksheets对象的属性(比如Value字段)也触发1004错误,大概率也是未明确限定父对象导致的。比如直接使用未绑定到指定工作簿的Worksheets引用,或误将ThisWorkbook替换为ActiveWorkbook(当其他工作簿激活时会出错)。确保所有工作表、单元格对象都明确绑定到目标工作簿和工作表即可。
内容的提问来源于stack exchange,提问作者Francois Roumel
相关产品推荐
相关产品推荐

