我正在使用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
答案 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
,就像其他人回答的那样