管理vba函数

时间:2015-05-25 10:26:09

标签: vba excel-vba error-handling excel

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

2 个答案:

答案 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 )