0

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

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

当您实际上不在第三张纸上时,您会收到一条错误消息,指出应用程序定义或对象定义错误。

我确信我不是第一个处理这个问题的人。有人知道如何处理这个问题而不必来回切换工作表吗?

4

2 回答 2

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))
于 2013-07-25T20:27:08.080 回答
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

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

于 2013-07-25T20:28:37.090 回答