2

我是一个 VBA 新手,并尝试制作两个与 If 语句一起使用的循环 - 根据此代码:

Sub Filter()
For Count = Worksheets("STR").Range("A1").End(xlDown).Row To 1 Step -1
    For Counter = 5 To Worksheets("Filter").Range("A5").End(xlDown).Row
    With Worksheets("STR").Range("C" & Count)
        If .Value Like Worksheets("Filter").Range("C" & Counter).Value _
            Or .Value Like Worksheets("Filter").Range("D" & Counter).Value _
            Or .Value Like Worksheets("Filter").Range("E" & Counter).Value _
            Or .Value Like Worksheets("Filter").Range("A" & Counter).Value Then
                Worksheets("STR").Range("D" & Count) = "X"
                'Worksheets("STR").Row("A" & Count).EntireRow.Delete
            Next Counter
        End If
    End With
Next Count
End Sub

在某个阶段,我想它会一遍又一遍地循环,直到它崩溃。调试器告诉我这是“End If”行,但我看不出有什么问题。有没有办法让这更容易?

提前致谢!

4

1 回答 1

2

四件事

  1. 缩进你的代码。这将确保您不会像@barrowc 建议的那样犯错误。
  2. 我建议不要使用End(xlDown)查找最后一行。有关如何找到最后一行的信息,请参阅此链接。
  3. ScreenUpdating转为 False 并将其重新打开。
  4. 使用错误处理

应用上述 4 条建议后,您的代码将如下所示。

Option Explicit

Sub Filter()
    Dim LastRowSTR As Long, LastRowFilter As Long
    
    On Error GoTo Whoa
    
    Application.ScreenUpdating = False
    
    With Sheets("STR")
        LastRowSTR = .Range("A" & .Rows.Count).End(xlUp).Row
    End With

    With Sheets("Filter")
        LastRowFilter = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    
    For Count = LastRowSTR To 1 Step -1
        For Counter = 5 To LastRowFilter
            With Worksheets("STR").Range("C" & Count)
                If .Value Like Worksheets("Filter").Range("C" & Counter).Value _
                Or .Value Like Worksheets("Filter").Range("D" & Counter).Value _
                Or .Value Like Worksheets("Filter").Range("E" & Counter).Value _
                Or .Value Like Worksheets("Filter").Range("A" & Counter).Value Then
                    Worksheets("STR").Range("D" & Count) = "X"
                    'Worksheets("STR").Row("A" & Count).EntireRow.Delete
                End If
            End With
        Next Counter
    Next Count
LetsContinue:
    Application.ScreenUpdating = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

有趣的阅​​读。

话题:“犯错”是人之常情

链接http ://siddharthout.wordpress.com/2011/08/01/to-err-is-human/

于 2012-08-13T21:31:53.303 回答