vba - 在VBA函数中管理典型的Excel公式错误

标签 vba excel error-handling

我正在写一些vba函数。
特别是,我正在重写VLOOKUP ...
在这个MY_VLOOKUP中,我有两个 bool(boolean) 变量:
1. error_range,如果在公式参数中传递的范围无效,则为true
2. not_ava,如果没有结果,则为true(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”或“#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

关于vba - 在VBA函数中管理典型的Excel公式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30436187/

相关文章:

asp.net-mvc-2 - 自定义错误页面不显示

forms - 基于输入的URL重定向,但如果输入的URL不存在,则发送回同一页面

excel - VBA - 尝试了解如何调用类模块

r - R中的tryCatch block ,返回变量

vba - 使用 VBA 从 Visio 形状导出数据

vba - Matlab 可以通过 ActiveX 在 Excel 文件中编写宏吗?

vba - 需要在 Excel 中刷新数据时运行 VBA 宏

vba - 从不同工作簿中的另一个工作表对工作簿中的 Excel 工作表执行过滤宏

vba - UserForm绘制后自动执行一些代码

vba - 在 VBA 中将双引号放在字符串中