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

时间:2017-10-01 00:30:46

标签: excel vba excel-vba

我正在使用Excel 2013 Home和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的列表中选择一个项目,则会在向下移动页脚的位置插入一个新行。在A10(第五选择),执行上面的代码,据说将页脚向下推10行,使其在整个第2页上显示,并且在打印出来时不会看起来很奇怪。然后,一组代码对标题进行格式化和复制,并将其粘贴到页脚上方第2页上的新行集中。在第6页和第4页的最终选择之后,我将在第1页上找到2个空行。

除了我要插入10个新行的部分之外,其他所有内容都完美无缺,因为它始终只给我8个。

2 个答案:

答案 0 :(得分:2)

要在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

希望这会有所帮助。

答案 1 :(得分:2)

只需使用此命令插入10行

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

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