如何使用Application.WorksheetFunction.Match捕获错误并以自定义方式处理它,而不是让Excel告诉我有错误?

时间:2019-02-09 00:02:56

标签: excel vba

我正在使用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

2 个答案:

答案 0 :(得分:3)

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


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

  • Application.Match不会引发运行时错误;相反,变量col_num将保留错误值(在这种情况下,错误{em> 2042 与#N/A相对应)。这样就可以测试IsError(col_num)。*


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

答案 1 :(得分:1)

要使用可能找不到匹配项的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,就像其他人回答的那样