.End(xlDown)替代vba

时间:2013-07-25 20:15:38

标签: vba excel-vba excel

我已经意识到.End(xldirection)似乎不起作用,如果你试图从另一张表中获取。例如,如果您执行代码

Set A = Sheets("3rd sheet").Range(Cells(2, 2), Cells(2, 2).End(xlDown))

虽然您实际上并未处于第3页,但是会收到错误消息,指出应用程序已定义或对象定义错误。

我确信我不是第一个处理这个问题的人。任何人都知道如何处理这个问题,而不必来回切换床单?

2 个答案:

答案 0 :(得分:4)

问题不在于.End(),是默认工作表。

您的代码应为:

Set A = Sheets("3rd sheet").Range(Sheets("3rd sheet").Cells(2, 2), Sheets("3rd sheet").Cells(2, 2).End(xlDown))

或(根据Cor_Blimey的评论建议):

With Sheets("3rd sheet")
    Set A = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown))
End With

或者(我最喜欢这个):

Set Sh = Sheets("3rd sheet")
Set A = Sh.Range(Sh.Cells(2, 2), Sh.Cells(2, 2).End(xlDown))

答案 1 :(得分:3)

您可以在特定Cells中明确引用Worksheet,否则它会在当前活动表中查找,从而产生错误。

Set A = Worksheets("3rd sheet").Range(Worksheets("3rd sheet").Cells(2, 2), _
    Worksheets("3rd sheet").Cells(2, 2).End(xlDown))
'or

With Worksheets("3rd sheet")
    Set A = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown))
End With

第二个版本更容易阅读和维护,当你需要引用“第三张”时,不要忘记点。