管理在VBA函数典型Excel公式错误(Managing typical excel formula

2019-09-26 00:09发布

我正在写一些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”的错误?

Answer 1:

您可以使用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


Answer 2:

我粘贴代码,也许它会卜有用的人

(感谢亚洲时报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 ) 


文章来源: Managing typical excel formula errors in vba functions