VBA切割到范围正在跳过第二行

VBA切割到范围正在跳过第二行,vba,excel,Vba,Excel,我得问个问题。这段代码在一个范围内循环,并将整行剪切/粘贴到另一个工作簿/工作表上 但是,它成功地剪切/粘贴了第一行。然后它跳过第二排。然后按预期继续,剪切/粘贴每一行(事实上,如果我设置了断点,您可以看到它命中第一行,跳过第二行,然后运行fine&命中所有其他行(H2、H4、H5等)。如果我将方法更改为“复制”,它将运行fine(H2、H3、H4等) 注意:我可以使用“复制”或其他解决方法。但我真的想知道为什么“剪切”会有这种行为 更新:抱歉,我更新了代码以剪切而不是复制。是的,我知道我需要目

我得问个问题。这段代码在一个范围内循环,并将整行剪切/粘贴到另一个工作簿/工作表上

但是,它成功地剪切/粘贴了第一行。然后它跳过第二排。然后按预期继续,剪切/粘贴每一行(事实上,如果我设置了断点,您可以看到它命中第一行,跳过第二行,然后运行fine&命中所有其他行(H2、H4、H5等)。如果我将方法更改为“复制”,它将运行fine(H2、H3、H4等)

注意:我可以使用“复制”或其他解决方法。但我真的想知道为什么“剪切”会有这种行为


更新:抱歉,我更新了代码以剪切而不是复制。是的,我知道我需要目标工作表中的标题行。我唯一的问题是为什么第二行永远不会从源工作表中剪切(但当我用复制替换剪切时,效果很好).

我看不到您在代码中剪切行的位置,因此我假设您也在复制行之后删除该行。如果是这种情况,请注意,当您删除行时,它下面的行会向上移动。这意味着如果
cell.row
=12,并且您删除了行12,则下一次迭代将查看行13,即使是行12现在有第13行的内容

通常情况下,为了避免这个循环向后迭代(
对于i=1到10步骤-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
我的问题是,为什么不立即读取/写入该范围内的所有内容?如果该范围内的每一行都需要复制,为什么不立即复制/粘贴所有内容

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

这真的是一个有趣的问题。我认为可能是
for
循环导致了问题(即
下一个单元格
),但在测试中,这也不是问题。我甚至将其放入
do while
循环中,得到了相同的结果。最后的手段(应该是第一个手段:),我去了医院,看看他们怎么说切割;这是关键的句子

切割范围必须由相邻单元组成

虽然我认为您的代码满足此条件,但“相邻单元格”语句让我思考……是否因为您正在剪切范围内的第一行,而该范围内没有上一行/单元格,所以它会跳过?沿着这些思路,我尝试了这段代码,它很有效,并且仍然使用
.Cut

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
Set myRange=工作表(“Sheet1”)。范围(“A1:A”&_
工作表(“Sheet1”)。单元格(工作表(“Sheet1”)。行数,1)。结束(xlUp)。行)
i=2

在我尝试更新代码时执行此操作,以便您的
范围
单元格
,以及
功能都与您要参考的工作表一起引导;i、 例如,
工作簿(“Blank1.xlsx”)。工作表(“Sheet1”)。行。计数
而不仅仅是
行。计数
对于要工作的代码,必须在源表中填充列A。您好,Jaycal,感谢您的回复。尝试添加您的建议,但仍然是相同的问题。第一行被剪切,第二行被跳过,然后它成功地剪切了其他所有内容。对不起,我把我最初发布的代码搞糟了。我实际上是在剪切,而不是复制(并且在剪切之后我不会删除任何内容)。。。而且,在我的实际宏中,我并没有削减所有内容。有许多条件可以确定我是否要剪切该行。问题是,它完全跳过了第二排(没有比较&显然永远不会删掉这一排)。。。。在我的示例中,为了简单起见,我将单独剪切每一行。此外,我应该补充一点,迭代“I”确实有效。但我更好奇的是,当我使用for-each时,切割的行为。这似乎很奇怪,因为它可以用于复制,但不能用于Cutinesting。谢谢你更新代码。也许如果你发布更多的代码,它会让我们了解为什么它会以这种方式运行?真的很有趣。。。我把它从代码中提取出来,放在它自己的子例程中,它的行为完全相同(我排除了代码的其余部分,以隔离问题)哇,你完全正确!非常有趣。我不知道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