2013-11-25 62 views
0

我想在具有多個表的Excel表上自動更新範圍。無法寫入動態範圍

我有

Dim datarange as Range 
Dim dataend as Integer 
dataend = Worksheets("Sheet2").Range("B2").CurrentRegion.Rows.Count 
Set datarange = Worksheets("Sheet2").Range(Cells(2, 2), Cells(8, dataend)) 

這是更新的範圍內用於在另一片的圖。

當我在即時窗口打印Worksheets("Sheet2").Range("B2").CurrentRegion.Rows.Count它返回數字7,所以我知道它正在計數行。但是,當我嘗試運行代碼時,出現錯誤,提示「應用程序已定義或對象定義的錯誤」。我不知道爲什麼Cells屬性不會採用dataend變量的值。

回答

1

當您使用Cells()沒有一個合格的工作表引用它默認爲活動工作表,所以你需要有資格既您參考,以確保它們指向到Sheet2:

With Worksheets("Sheet2") 
Set datarange = .Range(.Cells(2, 2), .Cells(8, dataend)) 
End With 
0

您輸入Cell,意味着活躍片。

您可以使用

Set datarange = Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(2, 2), Worksheets("Sheet2").Cells(8, dataend) 

得到的範圍內。

但表示太長。所以,你可以通過使用with ... end with簡化它,就像@Tim威廉斯寫了答案:

With Worksheets("Sheet2") 
Set datarange = .Range(.Cells(2, 2), .Cells(8, dataend)) 
End With 

這意味着相同的。

+0

@TimWilliams'的精確副本從3小時前回答? –

+0

實際上,我打開了一個excel並自己輸入了VBA代碼,我也使用了範圍函數而不是單元格函數,但是我有一些問題要做,所以我沒有立即輸入答案。我想我的答案確實解釋了這個問題的工作,而不僅僅是複製。答案完全一樣。然後我會添加@。 – thinkinnight

+0

謝謝。這兩個工作都很好。 – user2907249