Excel 2013 VBA宏-EntireRow.Insert循环工作不正常

Excel 2013 VBA宏-EntireRow.Insert循环工作不正常,vba,excel,Vba,Excel,我正在使用Excel 2013 Home and Office。有人知道为什么这些代码行不能按预期工作吗 rSel = ActiveCell.Row 'Insert 10 Rows For nCol = 1 To 10 Cells(rSel + 1, 1).EntireRow.Insert nCol = nCol + 1 Next nCol 简单地说,循环应该在活动单元格下插入10行,但我最后只得到8行。即使我把10改成了一个更高的数字,我也只能得到8个新行。我还尝试

我正在使用Excel 2013 Home and Office。有人知道为什么这些代码行不能按预期工作吗

rSel = ActiveCell.Row

'Insert 10 Rows
For nCol = 1 To 10
      Cells(rSel + 1, 1).EntireRow.Insert
      nCol = nCol + 1
Next nCol
简单地说,循环应该在活动单元格下插入10行,但我最后只得到8行。即使我把10改成了一个更高的数字,我也只能得到8个新行。我还尝试了下面一行更简单的代码,但结果是一样的

Cells(rSel + 1, 1).EntireRow.Resize(10).Insert
在任何人回答之前,我想详细说明这是为了什么,以防有帮助。工作表包含范围为A1:F5的页眉和范围为A8:F18的页脚。数据输入从使用数据验证的列表中的单元格A6开始。工作表必须按原样设计

当用户从列表中选择选项时,将在该行下方插入一个新行。因此,如果我从A6处的列表中选择一个项目,将在该行下方插入一个新行,将页脚向下移动。在第15次选择时,上面的代码被认为是将页脚向下推10行执行的,这样页脚就可以完整地显示在第2页上,并且在打印出来时不会看起来很奇怪。然后,一组代码格式化并复制页眉,并将其粘贴到页脚上方第二页的新行集中。在第六次也是最后一次选择之后,我将在第1页上留下两行空行


除我想插入10行新行的部分外,其他所有操作都非常有效,因为它始终只给我8行。要在ActiveCell下面插入10行,请使用以下代码段:

Sub InsertRow()
rSel = ActiveCell.Row
'Insert 10 Rows
For nCol = 1 To 10
      Cells(rSel + 1, 1).EntireRow.Insert
Next nCol
End Sub
删除导致错误的行:nCol=nCol+1

为了获得更好的性能,您可以使用以下代码段一次插入10行:

Sub InsertRowBestPerformance()
    r = ActiveCell.Row
    'Insert 10 Rows below ActiveCell
    Rows(r + 1 & ":" & r + 10).EntireRow.Insert
End Sub
这可以用一行代码以紧凑的形式编写:

Rows(ActiveCell.Row + 1 & ":" & ActiveCell.Row + 10).EntireRow.Insert

希望这会有所帮助。

只需使用此命令插入10行即可

activecell.Resize(10).EntireRow.Insert              ' insert above ActiveCell

activecell.offset(1).Resize(10).EntireRow.Insert    ' insert below ActiveCell

for命令已经在每次循环时将nCol增加1。然后再增加一次,这样nCol每次增加2。这会使它更快达到10。@jsotola您是对的:下面已经给出了正确的答案。如果您有页眉或页脚,则没有区别。如果用户从列表中选择值,也没有什么区别。添加行的原因没有区别。所有这些都无关紧要。重要的是,您正在将行添加到工作表中,却添加了意外数量的行。@AlexBell,我不知道OP的专业水平。我解释了为什么nCol=nCol+1会导致这个错误,我从来没有想过要反向调整大小和整个进程。非常感谢。我想那也行。不知怎的,我错过了你的单行10行插页。我试过了,效果很好。我不知道为什么它对你不起作用。。。您的代码在ActiveCell下面插入10行谢谢。这澄清了很多。我完全忘记了Next在For..循环中递增计数器变量。说我太老了,不适合干这个了,哈哈哈。再次感谢,不客气!祝你的项目好运。顺致敬意,