繁体   English   中英

Excel VBA为每次出现在循环中插入一行

[英]Excel VBA Inserting a Row in a Loop for Each Occurrence

我正在尝试构建一个检查某个值的 VBA 应用程序,然后在每次找到该值时在顶部添加一行。

    Sub copy()

    Dim rng As Range
Dim row As Range
Dim cell As Range

Set rng = Range("B2:B10")

For Each row In rng.Rows
  For Each cell In row.Cells
    If cell.value = "test" Then
        MsgBox "found" + cell.Address
        cell.EntireRow.Insert
    End If
    
  Next cell
Next row


End Sub

然而,每次我尝试运行这个函数时,它都会不断地在彼此之上添加行,而不是每次出现。

在此处输入图片说明

如果您从上到下循环单元格,添加该行会将您的原始范围向下推,从而导致下一个循环评估前一个单元格。

为了避免这种情况,向后循环(即从下到上):

Sub copy_test()

    Dim rng As Range
    Set rng = Range("B2:B10")
        
    Dim i As Long
        
    For i = rng.Cells.Count To 1 Step -1
        If rng.Cells(i).Value = "test" Then
            Debug.Print "Found"
            rng.Cells(i).EntireRow.Insert
        End If
    Next i
End Sub

注意: Set rng = Range("B2:B10")告诉 VBA 您指的是ActiveSheet单元格B2:B10 ,这可能不是您想要的。

请完全限定您的范围以避免这种情况。 (例如ThisWorkBook.Worksheets("Sheet1").Range("B2:B10")或使用工作表Sheet1.Range("B2:B10")的代码名称。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM