2012-02-22 66 views
6

下面的代碼試圖粘貼所選擇的範圍(如rng傳遞)到工作表的末尾。 如果已經存在2行(A1,A2),它將起作用。Excel VBA中 - xlDown

Sub copyRow(rng As Range, ws As Worksheet) 
    Dim newRange As Range 
    Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0) 
    rng.Copy 
    newRange.PasteSpecial (xlPasteAll) 
End Sub 

因此,如果A1和A2存在,並且如果您調用此方法100次,它會在它們之後插入100行。但是,如果沒有行或只有A1,它只是覆蓋A2。我能看到的Excel寫在同一行(覆蓋)

看來,東西用,如果有低於2行,不知道xlDown如何計算做。

任何幫助,將不勝感激。

回答

29

對不起,但我不同意邁克爾的答案。

完(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 + DownCtrl + Up嘗試會給你的價值觀的不同組合的效果的理解。

+5

+1很好地解釋它。事實上,我從未贊成使用「ws.Range(」A1「)。End(xlDown)」來設置範圍。原因在於,如果兩者之間存在空白單元,則不會給出(可以理解)正確的範圍。 :) – 2012-02-23 03:34:23

+0

託尼,感謝您的幫助。它爲我工作。關於第一部分,爲什麼我這樣做,我是第18項http://support.microsoft.com/kb/291308。驚訝地看到沒有簡單的方法來做到這一點。感謝aga。 – bsr 2012-02-23 03:44:43

+0

@SiddharthRout ..如果該行爲空,則最後一個單元格變得更糟。查找更好,但仍需要測試以確保感興趣的數據範圍不是空白。 ['查找'可以更容易](http://stackoverflow.com/q/4872512/641067)取決於需要什麼 – brettdj 2012-02-24 23:56:33

1

的問題是,偏移行點到行,這不是系列的一部分。但是如果沒有偏移量,您最終會看到該值的最後一行。因此,不要試圖從頂端下來,我們應該從底部開始。

轉到結束(下)兩次:一次爲這個範圍的結束,再一次走出這個範圍。然後去結束(上)一次,然後抵消1:

Sub copyRow(rng As Range, ws As Worksheet) 
    Dim newRange As Range 
    Set newRange = ws.Range("A1").End(xlDown).End(xlDown).End(xlUp).Offset(1, 0) 
    rng.Copy 
    newRange.PasteSpecial (xlPasteAll) 
End Sub 
+0

似乎不適合我,它只是創建A2,A3(和他的時間休息時寫的A3)的條目。我會做一個測試文件並附上這個問題。謝謝你的幫助。 – bsr 2012-02-22 23:45:58