我已經認識到.End(xldirection)似乎不起作用,如果您試圖從不同的工作表中獲取。例如,如果你執行該代碼.End(xlDown)vba中的替代方案
Set A = Sheets("3rd sheet").Range(Cells(2, 2), Cells(2, 2).End(xlDown))
,而你沒有實際上是在第三片材,將得到一條錯誤消息,應用程序定義或對象定義的錯誤。
我相信我不是第一個處理這個問題的人。任何人都知道如何處理這個問題,而無需切換來回的牀單?
我已經認識到.End(xldirection)似乎不起作用,如果您試圖從不同的工作表中獲取。例如,如果你執行該代碼.End(xlDown)vba中的替代方案
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
,否則它會看起來在cu rrently activesheet,創建錯誤。
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
第二個版本是非常容易閱讀和維護,當你需要引用「第三片」只是不要忘了點。
+1。另一種選擇是聲明工作表對象並在需要時使用它。例如'ws.Range'或'With ws' –
@HeadofCatering是的,我經常這樣做。我設置了我需要的書籍,圖紙和範圍的參考資料,然後我很好去。 –
或更容易讀取上面但用'With ... End With' :) –