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

Excel 尝试引用其他工作簿中的工作表并将其分配给变量时出现运行时错误1004,excel,vba,variable-assignment,Excel,Vba,Variable Assignment,我试着在两本不同的工作手册中使用两张纸。 由于某种原因,此代码返回一个错误 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 Des

我试着在两本不同的工作手册中使用两张纸。 由于某种原因,此代码返回一个错误

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)
当我使用watch检查源时,该赋值返回一个源为空的对象 然而,目的地似乎运作良好-目前

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错误(对象“\u global”的方法“Range”失败) 单元格引用的是源工作表,而不是目标工作表

我的代码有什么问题

作业问题
  • 在每个模块的开头使用
    选项Explicit

  • 避免使用
    工作表(1)
    ,尤其是
    工作簿(2)
    。他们有自己的
    名称
    ,甚至更好的
    名称

  • xlDown
    主要是避免使用
    xlUp

  • 一个常见的错误是忘记限定
    单元格
    ,甚至是
    范围

  • 为提高可读性,请对变量使用较短的有意义的名称

发生错误的原因是您没有限定
单元格
(例如
src.Cells
dest.Cells
…),因此代码试图在
目的地工作表上使用
单元格
对象
,而不是地址)获取
范围(
对象
,而不是地址)从
源代码表中
,这显然是不可能的

代码

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

您已将
Source
声明为
Variant
。行应该是:
将源作为工作表,将目标作为工作表<代码>工作簿(2)
不是一个好主意,它可能与“ThisWorkbook”相同
xlDown
也是个坏主意。和
单元格
不合格。尝试将完整代码从
Sub
发布到
Sub
。在你的帖子下面有一个编辑按钮。很好,但即使我将两者声明为工作表,我仍然有完全相同的问题。我不确定代码的其余部分是否与这里的问题相关,但我将非常感谢你在我的案例中提供的帮助。我还有其他问题,如果你有时间回答,我将不胜感激。我真的不明白为什么不使用OptionExplicit是不好的,如果你有一个链接解释它会很好。如果我不知道最后一行,我不知道如何使用xlUp?还是我遗漏了什么?
Option Explicit
强制您声明所有变量,这有助于防止意外错误,并帮助您更快地学习和更好地理解语言。在您的情况下,
xlUp
可以这样使用:
Set rngDest=dest.Range(dest.Cells(5,1),dest.Cells(dest.Rows.Count,1)。End(xlUp))