我正在写一些vba函数。 特别是,我正在重写VLOOKUP ...... 在这个MY_VLOOKUP中,我有两个布尔变量: 1. error_range,如果公式参数中传递的范围无效,则为true 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”错误?
答案 0 :(得分:0)
使用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
答案 1 :(得分:0)
我粘贴代码,也许对某人有用
(感谢Siddharth Rout的帮助)
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 )