2013-07-25 23 views
0

我已經認識到.End(xldirection)似乎不起作用,如果您試圖從不同的工作表中獲取。例如,如果你執行該代碼.End(xlDown)vba中的替代方案

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

,而你沒有實際上是在第三片材,將得到一條錯誤消息,應用程序定義或對象定義的錯誤。

我相信我不是第一個處理這個問題的人。任何人都知道如何處理這個問題,而無需切換來回的牀單?

回答

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)) 
+0

或更容易讀取上面但用'With ... End With' :) –

3

你可以明確地參考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

+1。另一種選擇是聲明工作表對象並在需要時使用它。例如'ws.Range'或'With ws' –

+0

@HeadofCatering是的,我經常這樣做。我設置了我需要的書籍,圖紙和範圍的參考資料,然後我很好去。 –