在范围对象中使用完全限定的单元格时出现运行时错误'1004'

时间:2019-10-29 14:38:25

标签: excel vba

我正在尝试使用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样式符号的引用时,代码将按预期在目标表中生成粘贴的值。

2 个答案:

答案 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中更改其名称时出错

enter image description here

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