【问题标题】:Go to the next iteration of a for loop if .Find doesn't find anything in Excel VBA如果 .Find 在 Excel VBA 中找不到任何内容,则转到 for 循环的下一次迭代
【发布时间】:2016-07-12 16:44:51
【问题描述】:
For j = 1 To i
    If j = 1 Then FY = FY1
    If j = 2 Then FY = FY2
    If j = 3 Then FY = FY3
    If j = 4 Then FY = FY4
    If j = 5 Then FY = FY5
    If j = 6 Then FY = FY6
    If j = 7 Then FY = FY7
    If j = 8 Then FY = FY8
    If j = 9 Then FY = FY9
Sheets("Calcs").Select
Sheets("Calcs").Range("6:6").Find(FY).Select
With Worksheets(TabName).Range("C:C")
    Set FYFindj = .Range.Find(FY, LookIn:=xlValues)
End With
    If FYFindj Is Nothing Then
        Next j
    End If

在 End If 语句之后,它做了很多效果很好的事情。如果找不到特定的 FY,我希望宏转到 j 的下一次迭代。

感谢您的帮助。

【问题讨论】:

    标签: excel loops for-loop vba


    【解决方案1】:

    您可以使用条件 If 来测试找到的范围,如果不存在则继续。为此,我重构了您问题中的代码,并清理了FY 的设置。

    For j = 1 To i
    
        Select Case j
            Case 1 To 9: FY = "FY" & j
        End Select
    
        With Worksheets(TabName)
    
            If Not .Range("C:C").Find(FY, LookIn:=xlValues) Is Nothing Then
    
                Set FYFindj = .Range("C:C").Find(FY, LookIn:=xlValues)
                'do stuff
    
            End If
    
        End With
    
    Next
    

    【讨论】:

    • 我相信FY1,FY2.. 是变量,而不是值。如果是这种情况,您拥有的选择案例将不起作用。我会将其更改为一组值,然后您可以执行FY(j)
    • 好点@ScottCraner - 我知道我在那里被欺骗了,但无法弄清楚它是什么。
    • 我正在尝试使用您的第二个建议。当我运行它时,在设置 FYFindj 变量的行上出现运行时错误“450”“参数数量错误或属性分配无效”。我的代码现在看起来像这样:
    • @ML12 - 抱歉,我没有("C:C")...现在试试
    • @Scott,非常感谢。我不敢相信我自己错过了!
    【解决方案2】:

    使用GOTO 语句

    For j = 1 To i
        If j = 1 Then FY = FY1
        If j = 2 Then FY = FY2
        If j = 3 Then FY = FY3
        If j = 4 Then FY = FY4
        If j = 5 Then FY = FY5
        If j = 6 Then FY = FY6
        If j = 7 Then FY = FY7
        If j = 8 Then FY = FY8
        If j = 9 Then FY = FY9
    
        Sheets("Calcs").Select
    
        With Worksheets(TabName).Range("C:C")
            Set FYFindj = .Range.Find(FY, LookIn:=xlValues)
        End With
        If FYFindj Is Nothing Then
            GoTo Exit_Loop
        End If
    Exit_Loop:
    
    Next j
    

    OR,使用条件逻辑:

    For j = 1 To i
        If j = 1 Then FY = FY1
        If j = 2 Then FY = FY2
        If j = 3 Then FY = FY3
        If j = 4 Then FY = FY4
        If j = 5 Then FY = FY5
        If j = 6 Then FY = FY6
        If j = 7 Then FY = FY7
        If j = 8 Then FY = FY8
        If j = 9 Then FY = FY9
    
        Sheets("Calcs").Select
    
        With Worksheets(TabName).Range("C:C")
            Set FYFindj = .Range.Find(FY, LookIn:=xlValues)
        End With
        If Not FYFindj Is Nothing Then
            '### DO a bunch of stuff that works great HERE
    
        Else:
            '### DON'T DO ANYTHING
        End If
    
    
    Next j
    

    【讨论】:

      【解决方案3】:

      这是我之前评论的后续。
      对于 j = 1 到 i

          If j = 1 Then FY = FY1
          If j = 2 Then FY = FY2
          If j = 3 Then FY = FY3
          If j = 4 Then FY = FY4
          If j = 5 Then FY = FY5
          If j = 6 Then FY = FY6
          If j = 7 Then FY = FY7
          If j = 8 Then FY = FY8
          If j = 9 Then FY = FY9
      Sheets("Calcs").Select
      
      With Worksheets("Calcs").Range("6:6")
          Set FYFindj = .Range.Find(FY, LookIn:=xlValues) 'This is where I get the Run-Time Error
      End With
      
      If Not FYFindj Is Nothing Then
      Sheets("Calcs").Range("6:6").Find(FY).Select
          addr = ActiveCell.Address
      

      【讨论】:

      • 您的答案基于下面的 Scott Holtzman,您需要归功于他。
      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 2015-05-03
      • 2015-09-06
      • 2015-02-10
      • 2021-05-15
      • 2015-11-11
      • 2017-10-05
      • 1970-01-01
      相关资源
      最近更新 更多