【问题标题】:Inserting blank rows after specific rows - VBA在特定行之后插入空白行 - VBA
【发布时间】:2017-11-23 14:01:46
【问题描述】:

这是我到现在才想出来的代码

Sub RunMe()
Dim x As Integer
Dim sv As Integer

x = 11
sv = Range("MyTable").Rows.Count


Do
    Rows(x).Resize(sv).Insert
    x = x + sv
Loop Until IsEmpty(Cells(x, "A"))
End Sub

所以基本上这应该在第 11 行插入空白单元格。但问题是它只是在表格末尾添加了空白单元格,而不是在第 11 行之后。有没有办法解决这个问题?我是 VBA 的纯初学者,这是我第一次尝试它。任何帮助将不胜感激。

【问题讨论】:

  • 您只需要在第 11 行之后插入 1 行,还是与表格行一样多?
  • 我需要插入与指定表“MyTable”一样多的行。为了更清楚“MyTable 在工作簿的第 2 表上,我想在第 1 行的第 11 行下添加整个表格。添加空白行应该只是实现这一目标的一步。但是如果有办法添加整个“MyTable " 一步到位,那就更好了。

标签: vba excel


【解决方案1】:

这可以通过以下方式实现:

LastRow = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row
Sheet2.Range("A1:K" & LastRow).Copy 'amend to include the number of columns, also change 1 to 2 if using header and don't want to include them
Sheet1.Rows("11:11").Insert Shift:=xlDown

这不会创建空行,而是会将所有包含数据的行插入 Sheet1 第 11 行。

所以数一下Sheet2的行数,然后选择要复制的范围,最后插入Sheet1的第11行。

更新:

Sheet2.Range("MyTable").Copy
Sheet1.Rows("11:11").Insert Shift:=xlDown

【讨论】:

  • 这对我来说很有意义,但我需要它更具体。我不想从表 2 中复制所有包含数据的行。我只想从指定的表“MyTable”中复制数据。再次,我是一个纯粹的新手,所以请对我裸露......
  • 更新了我的答案以反映您的 cmets。
  • 好的,现在它可以正确复制它了...现在我只需要弄清楚如何正确粘贴它...现在它只是粘贴在 sheet1 上的现有数据行上,这很奇怪......我需要它来推送这些数据......你的回答已经非常有用了,谢谢。
  • 这有点奇怪,...您是否使用带有 Shift:=xlDown 选项的 Insert 方法?请仔细检查您的代码,因为我已经对其进行了测试,它按预期工作......
  • 我将它与 Shift:=xlDown 选项一起使用,但该选项似乎对我不起作用...我尝试使用和不使用该选项进行操作,它做同样的事情。可能是因为我的日期来自外部数据库,所以它可能只是固定在那里并且不能向下移动。我不知道为什么这会是一个问题,但我看不出你的代码不能工作的其他原因,所以我将你的答案标记为正确。我会找到一种不同的方法来做到这一点。谢谢。
【解决方案2】:

试试这个,对我来说效果很好:

Sub RunMe()

    Dim x As Integer
    Dim sv As Integer

    x = 11
    sv = Range("MyTable").Rows.Count + 1 
    Rows(x).Resize(sv).Insert

End Sub

如果表格有 23 行,则在第 10 行之后插入 23 个空行。

【讨论】:

  • 不幸的是,这对我来说和我的代码一样......也许是因为我试图将空白行插入到指定的表中?这次要完全清楚,我试图将数据从表 2 中的表复制到表 1 中特定行下的表中。在此示例中,它是第 11 行。我们的两个代码都只是在 sheet1 上该表的末尾添加行。我很确定 .Insert Shift:=xlDown 需要在这个地方使用,只是不确定在哪里......