2013-10-30 95 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