2013-10-30 145 views
1
For Each cell In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) 
cell.EntireRow.Cut Workbooks("Book2.xlsx").Worksheets("Sheet1").Cells(Rows.Count,1).End(xlUp).Offset(1, 0) 
Next cell 

快速的問題。這段代碼循環遍歷一個範圍,並剪切整行或粘貼到另一個工作簿/工作表上。VBA切入範圍跳過第二行

但是,它成功剪切/粘貼第一行。然後跳過第二行。並按照預期繼續,切割/粘貼每一行(事實上,如果我設置了一個斷點,您可以看到它碰到第一行,跳過第二行,然後運行正常&碰到所有其他人(H2,H4,H5等)。 )如果我改變方法到「複製」,它運行良好(H2,H3,H4等)

注意:我可以使用'COPY'或其他一些解決方法,但真的只是想知道爲什麼' CUT'的行爲如下:

更新:對不起,我已經更新了CUT而不是COPY的代碼,而且我知道我需要目標工作表中的標題行,唯一的問題是爲什麼第二個行永遠不會從源表中切割(但是當我用COPY替換CUT時,它工作得很好)。

+0

嘗試更新代碼,以便您的'Range','Cell'和'Rows'函數都與您要引用的工作表一起引導;即Workbooks(「Blank1.xlsx」)。Worksheets(「Sheet1」).Rows.count'而不是僅僅是'Rows.count' – Jaycal

+0

爲了讓你的代碼工作在列**必須在源表中填充A ** 。 –

+0

嗨Jaycal,謝謝你的迴應。試圖添加你的建議,但仍然是同樣的問題。第一排被切斷,第二排被跳過,然後成功切斷其他所有部分。 –

回答

1

這真的很有意思。我認爲它可能是導致問題的for循環(即Next cell),但在測試中,結果也不是問題。我甚至把它放到了do while循環中,並得到了相同的結果。最後的手段(本應該是第一個度假村:)),我去了MDSN看看他們對Cut的看法。這裏是關鍵句子

切割範圍必須由相鄰的單元格組成。

當我想你的代碼符合此條件下,「鄰近細胞」的聲明讓我想...是跳繩,因爲你切割第一行中的範圍,在以前沒有行/單元格範圍?沿着這些線路,我試着這個代碼,它的工作原理,仍然使用.Cut

Set myRange = Worksheets("Sheet1").Range("A1:A" & _ 
    Worksheets("Sheet1").Cells(Worksheets("Sheet1").Rows.Count, 1).End(xlUp).Row) 
i = 2 
Do While i <= myRange.Rows.Count 
    myRange.Cells(i, 1).EntireRow.Cut _ 
     Worksheets("Sheet2").Cells(Worksheets("Sheet2"). _ 
      Rows.Count, 1).End(xlUp).Offset(1, 0) 
    i = i + 1 
Loop 

我創建了一個包含一個比你原來多列的範圍,但在相同的點,也就是現在的範圍內的第二排發車。由於這個工作,這使我相信,在切割時,excel使用前一行來設置切割後當前行的指針。由於在剪切第一行時沒有上一行,因此它會跳過,直到它能夠這樣做,解釋爲什麼剪切第一行不會返回所需的結果。

+0

哇,你絕對是這樣對!很有意思。我不知道CUT是這樣工作的......我會代表你,但沒有足夠的分數。 –

+0

我都沒有;那是我今天學到的新東西:) – Jaycal

0

我沒有在你的代碼中看到你正在切割的行,所以我會假設你在複製之後也刪除行。如果是這種情況,請注意,當您刪除一行時,它下面的行會向上移動。這意味着如果cell.Row = 12並且刪除了第12行,則即使第12行現在具有第13行的內容,下一次迭代也會查看第13行。

通常情況下,這個人通過循環向後迭代(For i = 1 to 10 Step - 1)。 However, you can't iterate backwards through a For Each statement

試試這個:

For i = 2 to Cells(Rows.count, 1).End(xlUp).Row Step - 1 
    'Put your code here 
    'Tip: use Cells(i,"H") to reference each cell in column H 
Next i 

我的問題是,你爲什麼不讀/在這個範圍內的一切寫在一次?如果需要複製該範圍內的每一行,爲什麼不一次性複製/粘貼所有內容?

Dim Rng as Range 
Set Rng = Range("H2:N" & Cells(Rows.count, 1).End(xlUp).Row) 
'Note I changed the second column reference. Modify this to whichever is the last column in your range. 
Rng.copy Workbooks("Blank1.xlsx").Worksheets("Sheet1").Cells(Rows.count, 
1).End(xlUp).Offset(1, 0) 
Rng.Clear 
+0

對不起,我搞砸了最初發布的代碼。我實際上是在切割,而不是複製(並且我沒有在切割後刪除任何東西)......另外,在我的實際宏中,我並沒有切割任何東西。有許多條件可以確定我是否想要剪切該行。問題是,它完全跳過了第二行(沒有比較,顯然不會切斷該行)。在我的示例中,爲了簡單起見,我正在分別切割每一行。 –

+0

另外,我應該補充說,迭代'我'的工作。但是當我爲每個人使用時,我更關心CUTTING的行爲。看起來奇怪,它可以與COPY一起使用,但不適用於CUT –

+0

有趣。感謝您更新代碼。也許如果你發佈了更多的代碼,它會給我們一些洞察它爲什麼會這樣的行爲? – ARich