尝试引用不同工作簿中的工作表并将其分配给变量时出现运行时错误 1004

RunTime error 1004 when trying to reference a worksheet in a different workbook and assign it to a variable

我正在尝试在两个不同的工作簿中处理两个 sheet。 出于某种原因,此代码 returns 错误

Sub look()
Dim Source, Destination As Worksheet
Dim Range1_in_Source As Range
Dim Range1_in_Destination As Range

path = "" :file = "file name"

Set Source = Workbooks(2).Worksheets(1)
Set Destination= ThisWorkbook.Worksheets(1)

这个赋值 returns 当我使用 watch 检查它时,一个对象对于 Source 来说是空的 然而,目的地似乎运作良好 - 目前!

Set Range1_in_Source= Source.Range(Cells(2, 1), Cells(2, 1).End(xlDown)) 
Set Range1_in_Destination = Destination.Range(Cells(5, 1), Cells(5, 1).End(xlDown))

出于某种原因,最后一行出现运行时 1004 错误(对象“_global”的方法 'Range' 失败) 并且单元格指的是源 sheet 而不是目标。

我的代码有什么问题

作业问题

  • 在每个模块的开头使用 Option Explicit

  • 避免使用 Worksheets(1),尤其是 Workbooks(2)。他们有他们的names,甚至更好code names

  • xlDown 大多被避免使用 xlUp.

  • 一个常见的错误是忘记限定 CellsRowsColumns,甚至 ranges.

  • 为了提高可读性,请为变量使用更短且有意义的名称。

您的错误发生是因为您没有限定 Cells(例如 src.Cellsdest.Cells...),因此代码试图 'get' a rangeobject,不是地址)在 destination sheet 'using' cellsobject,不是地址)从 source sheet 这显然是不可能。

代码

Option Explicit

Sub look()
    
    Dim src As Worksheet: Set src = Workbooks(2).Worksheets(1)
    Dim dest As Worksheet: Set dest = ThisWorkbook.Worksheets(1)
    
    Dim rngSrc As Range
    Set rngSrc = src.Range(src.Cells(2, 1), src.Cells(2, 1).End(xlDown))
    Dim rngDest As Range
    Set rngDest = dest.Range(dest.Cells(5, 1), dest.Cells(5, 1).End(xlDown))

    Dim Path As String: Path = ""
    Dim file As String: file = "file name"

End Sub