for循环没有捕获所有预期值

时间:2015-01-02 21:01:45

标签: excel excel-vba vba

Dim p As Variant
For Each p In Range("P2:P8")
    If p.Value = "TGL block new" Then

        p.EntireRow.Select
        Selection.Delete Shift:=xlUp


        End If
   Next p

为什么这个for循环没有捕获所有TGL block new值?如果任何行在列P2中包含此值:到最后一个单元格,则需要从数据范围中删除整个水平行,即A2:BL6

1 个答案:

答案 0 :(得分:1)

你正在失去 p 的位置,因为你删除了它,然后当你已经在下一个时,尝试转移到下一个。删除行时的一般经验法则是从底部开始处理,但这意味着要调整方法。

Dim p As long
For p=8 to 2 step -1
    If lcase(trim(cells(p, "P").Value)) = "tgl block new" Then
        cells(p, "P").EntireRow.Delete Shift:=xlUp  ' the Shift:=xlUp isn't needed beyond a visual reminder
    End If
Next p

我在值上添加了一些错误控制,以删除前导/尾随空格和不区分大小写。