我正在嘗試構建一個檢查某個值的 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
然而,每次我嘗試運行這個函式時,它都會不斷地在彼此之上添加行,而不是每次出現。

uj5u.com熱心網友回復:
如果您從上到下回圈單元格,添加該行會將您的原始范圍向下推,從而導致下一個回圈評估前一個單元格。
為了避免這種情況,向后回圈(即從下到上):
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 您指B2:B10的ActiveSheet是可能不是您想要的單元格。
請完全限定您的范圍以避免這種情況。(例如ThisWorkBook.Worksheets("Sheet1").Range("B2:B10")或使用作業表的代碼名稱Sheet1.Range("B2:B10")。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336058.html
