Range.End不返回Long;到电子表格的末尾,而不是在第一个空白单元格停止

时间:2018-02-28 14:47:02

标签: excel-vba vba excel

我使用以下代码查找数据列中的最后一个行号:

Dim LR as Long
LR = Range("A4").End("xlDown").Row

A列中的数据之间没有空白单元格。我收到类型不匹配错误。当我尝试选择最后一行时,我收到一个对象错误。

我正在使用之前的代码,因为这段代码:

Workbooks(JunxureFile).Sheets("Sheet1").Range("A4", "A" & 
Range("A4").End(xlDown).Row).Copy

在第一个空白单元格后没有停止,而是复制了整个列(Excel允许的最大行数)。

我看过Range.End的每个例子都暗示它不应该这样做,所以我不确定问题是什么。我现在要尝试使用rows.count,但我想知道这段代码的问题是什么。如何更改代码才能使其正常工作?

EDIT2:

我刚试过

ActiveSheet.Range("E1").Value = Rows.Count

看到Rows.Count给我1048576,所以它仍然选择太多行。我将尝试将我的数据复制并粘贴到另一个工作簿,看看是否有帮助(EDIT3:它没有)。

1 个答案:

答案 0 :(得分:1)

这个

Workbooks(JunxureFile).Sheets("Sheet1").Range("A4", "A" & Range("A4").End(xlDown).Row).Copy

可能会失败,因为您没有为第二个范围指定正确的工作表,例如

Workbooks(JunxureFile).Worksheets("Sheet1").Range("A4", "A" & Workbooks(JunxureFile).Worksheets("Sheet1").Range("A4").End(xlDown).Row).Copy

或以较短的方式

With Workbooks(JunxureFile).Worksheets("Sheet1")
    .Range("A4", "A" & .Range("A4").End(xlDown).Row).Copy
End With

<强>解释
如果您使用Range("A4")而没有指定此范围在哪个工作表中,VBA会猜测您的意思是哪个工作表,并且在大多数情况下它与编写ActiveSheet.Range("A4")相同,但这可能很容易出错。所以总是指定您所指的范围的工作表:Workbooks(JunxureFile).Worksheets("Sheet1").Range("A4")