excel-vba 2013,插入一行格式与上面的行相同

时间:2016-01-20 13:15:44

标签: excel vba excel-vba

我循环遍历列(M),如果值为> = 1,我想在下面插入一行。它应该与上面的行具有相同的格式,并从列A:I

中复制数据
Sub insertRow()

Dim LastRow As Long
Dim rng As Range, Cell As Range, rng2 As Range, rng3 As Range

LastRow = xlLastRow
Set rng = Range("M3:M" & LastRow)  

For Each Cell In rng
If Cell.Value >= 1 Then Rows.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Set rng2 = Range("A3:I3")
rng2.Copy
set rng3 = Range("A4")
rng3.PasteSpecial Paste:=xlPasteAllUsingSourceTheme
Next Cell

xlLastRow函数在别处定义。我在“Then”语句中收到“应用程序定义或对象定义的错误”。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

当插入(或删除)行时,您需要向后退步行计数(从最后一行开始向上移动)。这是因为一旦你插入一行,它将通过范围关闭,如果你从头到尾,你会错过行。

这是一个问题。另一个问题是,您没有具体指出要插入的单元格和行。避免错误的最佳方法是限定并直接使用您的对象。还有第三个问题是你似乎没有结束你的If块,但我可能会误解代码。请参阅下面的笔记。

请参阅此代码,该代码应该更顺畅地为您服务:

Dim LastRow As Long
Dim x as Long
Dim ws as Worksheet

Set ws = Sheets("Sheeet1") 'change as needed

LastRow = xlLastRow 

For x = LastRow to 3 Step -1

    If ws.Range("M" & x).Value >= 1 Then 
       ws.Rows(x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    'this will copy data A:I from same row into newly inserted row
      ws.Range("A" & x & ":I" & x).Copy
      ws.Range("A" & x +1 & ":I" & x + 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme

    End If

Next Cell

答案 1 :(得分:0)

在开始'next'之前,您需要一个if if语句。在'then'之后缩进以制作更明确定义的

也是正常的

答案 2 :(得分:0)

您必须指定相对于它插入新行的行。

行(x)。插入