【问题标题】:If there is no value in a filter then exit sub如果过滤器中没有值,则退出 sub
【发布时间】:2014-03-04 04:51:10
【问题描述】:

我正在运行一个宏,它根据用户输入的数字进行过滤。然后它获取该数字并根据该值过滤列表。我需要验证,如果用户输入不在列表中的数字,它将退出宏。我想我很接近,但我是 VBA 的新手,所以我一直卡住。任何帮助都会很棒!

谢谢!

    'Filter based on user entry
Sheets("New Revision ").Select
    part = Range("B4").Value
    Sheets("PN_List").Select
    Columns("D:E").Select
    Selection.EntireColumn.Hidden = False
    ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field:=1, Criteria1:=part
    If ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field=1, Criteria1="" Then
    MsgBox "Part number not found please try again.", vbOKOnly + vbExclamation, "Entry Error"
    Exit Sub
    End If

【问题讨论】:

    标签: vba validation excel filter


    【解决方案1】:
    Sheets("New Revision ").Select
        part = Range("B4").Value
        Sheets("PN_List").Select
        If Application.Countif([A1:A3000], part)  < 1 Then
        MsgBox "Part number not found please try again.", vbOKOnly + vbExclamation, "Entry Error"
        Exit Sub
        End If
        Sheets("PN_List").Columns("D:E").EntireColumn.Hidden = False
        ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field:=1, Criteria1:=part
    

    【讨论】:

      【解决方案2】:

      试试这个:

      Sub Parts()
      Dim Part As Variant
      Dim Found As Boolean
        Part = Sheets("New Revision").Range("B4").Value
        On Error Resume Next ' If the lookup fails, ignore the error
          ' the following assumes Part is in Column A
          Found = WorksheetFunction.Match(Part, Sheets("PN_List").Range("$A$1:$A$3000"), 0) > 0
        On Error GoTo 0 ' Resume normal error handling
        If Not Found Then
          MsgBox "Part number not found please try again.", vbOKOnly + vbExclamation, "Entry Error"
        End If
      End Sub
      

      编辑:您仍然可以根据需要进行过滤。在If Not FoundElse 子句中可能是一个好地方。

      【讨论】:

      • 您可以在不需要额外变量或更改 On Error 操作的情况下执行相同操作。通过用 If Not IsError(Application.Match(Part, Range("$A$1:$A$3000"), 0)) Then 替换 Part 和 Msgbox 之间的所有内容,您还可以摆脱您的暗淡语句。将从 9 行变为 4 行。由于问题不是仅找到匹配项,因此您不需要实际返回匹配结果。
      • @user2140261 所有的优点。 Part 的值也可以即时确定,从而进一步减少代码。我故意选择展示一种更循序渐进的方法。也就是说,我更喜欢你使用CountIf,而不是我选择Match(并因此而赞成)。
      猜你喜欢
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      相关资源
      最近更新 更多