我正在写一些VBA函数。 特别是,我重写VLOOKUP ......在这个MY_VLOOKUP,我有两个布尔变量:1 error_range,它如果公式参数传递的范围是无效的2 not_ava是真的,如果没有结果,这是真的(所述VLOOKUP结果将是#N / A)
在错误处理程序段,我写
Errorhandler:
If error_range Then error_cat = xlErrRef
If not_ava Then error_cat = xlErrNA
Err.Raise error_cat
但我得到的细胞“#VALUE”错误。 调试时,我意识到,err.raise不工作,并生成该“#VALUE”错误我怎样才能得到一个“#N / d” o在细胞“#REF”的错误?
您可以使用Excel公式时,得到了许多错误。 他们可以像#Ref
, #Value
, #N/A
, #Name
等。
我通常使用CVERR()
来捕获这些类型的错误。 下面是一个例子。
Sub Sample()
Dim Ret As Variant
Dim error_cat As Long
On Error GoTo Whoa
Ret = Application.Evaluate("=VLOOKUP(12,SiddharthRout,1,0)") '<~~ Invalid Range
'Ret = Application.Evaluate("=VLOOKUP(12,D3:G7,1,0)") '<~~ No Value found
Select Case CVErr(Ret)
Case CVErr(xlErrName): error_cat = xlErrName
Case CVErr(xlErrNA): error_cat = xlErrNA
Case CVErr(xlErrRef): error_cat = xlErrRef
Case CVErr(xlErrValue): error_cat = xlErrValue
End Select
If error_cat <> 0 Then Err.Raise error_cat
LetsContinue:
MsgBox "Phew!"
Exit Sub
Whoa:
MsgBox "Error Error Damn Error"
Resume LetsContinue
End Sub
我粘贴代码,也许它会卜有用的人
(感谢亚洲时报Siddharth溃败的帮助)
If error_range Then
error_cat = xlErrRef
Else
If not_ava Then
error_cat = xlErrNA
else
error_cat = xlErrValue
End If
end if
my_vlookup = CVErr(error_cat )