尝试运行循环以删除没有特定单词的行时Excel崩溃

时间:2013-05-16 14:50:53

标签: excel vba

所以有一个噩梦,语法和一切都是正确的,但逻辑似乎是有缺陷的:S 此代码用于删除不包含单词

的行
Facility

Government

从B列的所有单元格开始,从第2行开始

Sub lol()


Dim i As Integer
i = 2
'While i < LastRow  <---- Use for real calc, LastRow calculated beforehand
While i < 4

If Cells(i, 2).Value <> "Facility" Then
    ElseIf Cells(i, 2).Value <> "Government" Then
        Rows(i).EntireRow.Delete
    Else
        i = i + 1

    End If

Wend

End Sub

然而不知何故,它一直在崩溃我的excel,我认为可能是因为我的原子处理器,所以我将循环的大小减小到最小。 然而它仍然崩溃,任何人都可以看到任何错误吗?

任何帮助将不胜感激

谢谢!

3 个答案:

答案 0 :(得分:2)

删除行时需要后退,否则索引会混淆。您的ElseIf逻辑也不起作用。请改用And。最后,使用For循环而不是While,因为它会自动索引。这是未经测试的,但应该有效:

Sub lol()
Dim i As Integer

i = 2
For i = LastRow to 2 Step -1
    If Cells(i, 2).Value <> "Facility" And Cells(i, 2).Value <> "Government" Then
        Rows(i).EntireRow.Delete
    End If
Next i
End Sub

答案 1 :(得分:1)

Sub DeleteRowsBasedOnCriteria()
    Dim i As Long ' instead of integer
    ' always delete from the end
    For i = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
        If StrComp(CStr(Range("B" & i).Value), "Facility", vbTextCompare) = 0 Or _
            StrComp(CStr(Range("B" & i).Value), "Government", vbTextCompare) = 0 Or _ 
            isEmpty(Range("B" & i)) Then
        Else
            Rows(i & ":" & i).Delete (xlShiftUp)
        End If
    Next i
End Sub

答案 2 :(得分:0)

而不是Rows(i).EntireRow.Delete使用Cells(i,2).Delete(xlShiftUp)。应该这样做。

在wend之前放置一个VBA.DoEvents(),这样你就可以进入程序。

我会尝试更有用!这将有效:

Sub lol()
    Dim rng As Excel.Range
    Dim i As Integer
    i = 2
    'While i < LastRow  <---- Use for real calc, LastRow calculated beforehand
    While i < 4

    If Cells(i, 2).Value = "" Then Stop

    If Cells(i, 2).Value <> "Facility" And Cells(i, 2).Value <> "Government" Then

            Set rng = Cells(i, 2)
            rng.Delete (xlShiftUp)

        Else
            i = i + 1

        End If
        VBA.DoEvents

    Wend

End Sub

您看到我已使用stop语句添加了终止条件,并重做了If语句。