對不起,但我不同意邁克爾的答案。
完(xlDown)是VBA等效點擊Ctrl
+ Down
的。
嘗試Ctrl
+ Down
與
- 空柱
- 與行1,2 2
- 值在第1行的值,而是在列1中沒有其他
- 值和列,3,7,8,9,13,14和15
這會給你一個想法,所有不同的行,Ctrl
+ Down
可能帶你到。
Set newRange = ws.Range("A1").End(xlDown).End(xlDown).End(xlUp).Offset(1, 0)
並不一定帶你到最後使用的行號加1
我很驚訝Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0)
與空柱的工作。 Range("A1").End(xlDown)
會將您帶到工作表的最後一行,然後.Offset(1, 0)
會嘗試將您從工作表中移出。
考慮:
Dim RowLast As Long
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
- 如果A列是空的,RowLast將被設置爲1。
- 如果A1具有一個值,但沒有其他的細胞具有的值,RowLast將被設置爲1。
- 如果A列中的單元格數量具有值,則RowLast將設置爲具有值的底部行。
- 如果您在最後一行有值,它將被忽略。
- 如果您在最後兩行中有值,RowLast將被設置爲Rows.Count - 1。
我假設你沒有在borrom行中的值。如果你,如果第1行留空一個空欄,然後不在乎:
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set NewRange = ws.Cells(RowLast + 1, "A")
應該得到期望的結果,無論片WS的當前內容。
如果你在乎行1被留空,與Ctrl
+ Down
和Ctrl
+ Up
嘗試會給你的價值觀的不同組合的效果的理解。
+1很好地解釋它。事實上,我從未贊成使用「ws.Range(」A1「)。End(xlDown)」來設置範圍。原因在於,如果兩者之間存在空白單元,則不會給出(可以理解)正確的範圍。 :) – 2012-02-23 03:34:23
託尼,感謝您的幫助。它爲我工作。關於第一部分,爲什麼我這樣做,我是第18項http://support.microsoft.com/kb/291308。驚訝地看到沒有簡單的方法來做到這一點。感謝aga。 – bsr 2012-02-23 03:44:43
@SiddharthRout ..如果該行爲空,則最後一個單元格變得更糟。查找更好,但仍需要測試以確保感興趣的數據範圍不是空白。 ['查找'可以更容易](http://stackoverflow.com/q/4872512/641067)取決於需要什麼 – brettdj 2012-02-24 23:56:33