Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 脚本反复循环-为什么?_Excel_Vba - Fatal编程技术网

Excel 脚本反复循环-为什么?

Excel 脚本反复循环-为什么?,excel,vba,Excel,Vba,我是一名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

我是一名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
在某个阶段,我想它会反复循环,直到崩溃。调试器告诉我这是“如果结束”行,但我看不出有什么问题。有没有办法让这更容易

提前谢谢

四件事

  • 缩进代码。这将确保您不会像@barrowc建议的那样犯错误
  • 我建议不要使用
    End(xlDown)
    查找最后一行。有关如何查找最后一行,请参见此
  • 屏幕更新
    设置为False并将其重新设置为启用
  • 使用错误处理
  • 应用上述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
    
    有趣的阅读

    主题:“犯错”是人类的行为


    链接

    如图所示,代码没有运行-您将得到一个没有错误的Next,因为
    Next计数器
    行应该在
    End If
    End With
    之后,而不是在HEY Barrowc,thx之前-但它仍然不起作用(或者需要很长时间)。是否有任何方法可以让这一功能更好?+1可能希望在模块顶部添加一个
    选项Explicit
    ,如果模块顶部还没有一个选项=1用于高级客户服务@巴罗克:是的,非常正确。添加了“…”和
    选项Explicit
    意味着需要声明
    计数
    计数器
    (除非它们在其他地方的范围内)