【问题标题】:How to catch an error with Application.WorksheetFunction.Match and handle it? [duplicate]如何使用 Application.WorksheetFunction.Match 捕获错误并进行处理? [复制]
【发布时间】:2019-02-09 00:02:56
【问题描述】:

我正在使用Application.match 函数来查找我要查找的列标题的列号。如果没有一个标题匹配,我想要一个自定义的弹出 MsgBox。

在它到达 IfError 语句之前,Excel 会停止我的程序并显示一个 MsgBox,它说没有匹配项

col_num = Application.WorksheetFunction.Match("wanted name", theDataWS.Rows(1), 0)

If IsError(col_num) Then 
    MsgBox "Please rename your column name to 'wanted name'"
End If

【问题讨论】:

    标签: excel vba error-handling


    【解决方案1】:

    一种选择是使用Application.Match 而不是Application.WorksheetFunction.Match


    • Application.WorksheetFunction.Match 如果没有匹配,将抛出运行时错误。如果需要,您可以使用On Error... 语句捕获和处理它,或者在这种情况下使用Application.Match 可能更好。

    • Application.Match 不会抛出运行时错误;相反,变量col_num 将保存错误值(在这种情况下Error 2042 对应于#N/A)。这样你就可以测试IsError(col_num).*


    *请注意,在这种情况下,col_num 应该是 Variant(使用 Dim col_num 隐式声明或使用 Dim col_num As Variant 显式声明)。

    【讨论】:

    • 太好了,很高兴为您提供帮助,轻松解决!
    • 您可能会提到 col_num 需要是一个变体才能捕获错误。
    • @user11026105 是的,我的措辞中有一段时间,但出于某种原因没有包括在内。
    【解决方案2】:

    要使用可能找不到匹配项的Application.WorhsheetFunction.Match,您需要使用错误处理程序。

    类似

    On Error Resume Next
    col_num = Application.WorksheetFunction.Match("wanted name", theDataWS.Rows(1), 0)
    If Err.Number <> 0 Then
        On Error Goto 0 ' restore error handling as soon as possible
        MsgBox "Please rename your column name to 'wanted name'"
    Else
        On Error Goto 0
        ' non-error code
    End If
    

    或者像其他人回答的那样使用Application.Match

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      相关资源
      最近更新 更多