我正在尝试使用range对象的cells属性从一个工作簿中复制值并将其粘贴到另一个工作簿中。如何正确声明范围引用,以免收到“ 1004”运行时错误?
我正在使用Excel 2013,并且正在具有活动工作表的“ Practicebook”工作簿中运行代码。
我已经研究了许多类似的问题,Run time error 1004 in Range(Cells()),但它们并没有帮助我。我已确保我的推荐人完全合格。
Sub Transfer()
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Set wsCopy = Workbooks("Practicebook2").Worksheets("Sheet1")
Set wsDest = Workbooks("Practicebook").ActiveSheet
wsCopy.Range(wsCopy.Cells(2,8)).Copy
wsDest.Range("J5").PasteSpecial
End Sub
运行代码时,出现错误消息“对象'_Worksheet'的方法'范围'失败”,并在调试器中突出显示了下面粘贴的第六行代码。当更改对A1样式符号的引用时,代码将按预期在目标表中生成粘贴的值。
答案 0 :(得分:3)
Range需要一个字符串或两个单元格来定义范围。
仅使用一个CELL删除RANGE:
wsCopy.Cells(2,8).Copy
使用两个单元格时,会出现以下情况:
wsCopy.Range(wsCopy.Cells(2,8),wsCopy.Cells(4,10)).Copy
如果相反,在单元格中有一个字符串范围,则需要将.Value
附加到Cells()
wsCopy.Range(wsCopy.Cells(2,8).Value).Copy
现在,它将以该单元格中的值作为字符串,并将其传递给Range。
也跳过双行:
wsCopy.Cells(2,8).Copy wsDest.Range("J5")
复制使用目标参数。
答案 1 :(得分:1)
使用范围时,您需要考虑两件事:
1-您可以通过工作表的代码名称来引用工作表,这样可以防止有人在Excel中更改其名称时出错
2-您无需使用范围内的单元格。所以代码看起来像这样:
Sub Transfer()
'Dim wsCopy As Worksheet -> Don't need this if you refer to the sheet with it's codename
Dim wsDest As Worksheet
'Set wsCopy = ThisWorkbook.Worksheets("Sheet1") -> Don't need this if you refer to the sheet with it's codename
Set wsDest = ThisWorkbook.ActiveSheet
Sheet1.Cells(2, 8).Copy wsDest.Range("J5") ' -> Refer directly to source sheet codename
End Sub