在指定行上方插入行

时间:2013-07-24 19:43:02

标签: vba insert rows

我想知道如何在具有“订单类型”的指定行上方插入3个额外的行(如下所述)。

此行在工作表中多次出现。下面的代码有效,除了它插入指定行下面的行。谢谢

Sub try()
    Dim c As Range

    For Each c In Range("A1:A100")
        If c.Value Like "*Order Type*" Then
            c.Offset(3, 0).EntireRow.Insert
        End If
    Next c
End Sub

2 个答案:

答案 0 :(得分:4)

如果您的问题是在搜索条件之上添加3行,那么解决问题应该很简单:

在您的代码行中:

c.Offset(3, 0).EntireRow.Insert

你的专栏说当找到订单类型时,他应该在下面3行并插入额外的行。

应该是这样的:

c.EntireRow.Resize(3).Insert

我的专栏说,当找到订单类型时,在其上方添加3行。

希望这就是你要找的。

编辑:

我搜索了互联网并找到了与您的问题类似的内容,并根据您的需要进行了更改。希望这对你有用。 几点解释它是如何工作的:它一直在A列中搜索,如果找到“ Order Type ”,它会在它上面添加3行。当宏转到空白单元格时,它会停止。试一试,告诉我它是否适合你。

Sub AddRows()

Dim lastValue As String, i As Long, r As Long
Do
    r = r + 1
    If r > 1 And Cells(r, 1).Value Like "*Order Type*" Then
        If Cells(r, 1).Value = "" Then Exit Do
        For i = 1 To 3
            Rows(r).Insert Shift:=xlUp
        Next
        r = r + 3

        Else
            If IsEmpty(Cells(r, 1)) = True Then
            Exit Do

            Else

            End If

    End If
    lastValue = Cells(r, 1).Value
Loop

End Sub

答案 1 :(得分:1)

这应该是三行而不是三行:

c.Offset(-3, 0).EntireRow.Insert

请谨慎使用,因为如果当前行上方没有三行,则会抛出错误。更安全的方法是从当前行插入+ 2并将所有内容向下移动。

Rows(c.Row & ":" & c.Row + 2).EntireRow.Insert Shift:=xlDown

编辑:直到excel冻结为止的原因是由于你的循环构造方式。第一次找到匹配时,它会插入行然后再继续查找相同的匹配,从而导致它陷入无限循环。

你可以尝试一下,看看它是否符合你的要求,它对我有用。

Sub try()
    Dim i As Long
    Dim c As Range

    Do While i < ActiveSheet.UsedRange.Rows.Count
        i = i + 1
        Set c = Cells(i, 1)

        If c.Value Like "*Order Type*" Then
            Rows(c.Row & ":" & c.Row + 2).EntireRow.Insert Shift:=xlDown
            i = i + 3
        End If
        Debug.Print i
    Loop
End Sub