我已经意识到 .End(xldirection) 如果您试图从不同的工作表中获取,它似乎不起作用。例如,如果您执行代码
Set A = Sheets("3rd sheet").Range(Cells(2, 2), Cells(2, 2).End(xlDown))
当您实际上不在第三张纸上时,您会收到一条错误消息,指出应用程序定义或对象定义错误。
我确信我不是第一个处理这个问题的人。有人知道如何处理这个问题而不必来回切换工作表吗?
问题不在于.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))
您可以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
第二个版本更容易阅读和维护,只是当你需要参考“第三张表”时不要忘记点。