为什么只有一个 VBA 错误处理程序处理错误?

开发人员

这是一个 XY 问题,但我发现它本身很奇怪。

这是我将一些代码放在一起作为搜索日期的解决方案的一部分:

...
    Dim Short_Date As Date
    Dim Long_Date As Date
    Dim Not_A_Short_Date As Boolean
    Dim Not_A_Long_Date As Boolean
    Not_A_Short_Date = False
    Not_A_Long_Date = False
    On Error GoTo Short_Date_Error
        Short_Date = CDate(Format(Find_What, "Short Date"))
        GoTo Long_Date
Short_Date_Error:
        Not_A_Short_Date = True
Long_Date:
    On Error GoTo Long_Date_Error
        Dim Temp
        Temp = Format(Find_What, "Long Date")
        Long_Date = CDate(Format(Find_What, "Long Date"))
        GoTo Date_Find
Long_Date_Error:
        Not_A_Long_Date = True
Date_Find:
...

我发现 VBA 运行时在 Long_Date = CDate(Format(Find_What, "Long Date")) 行引发了一个错误,指出类型不匹配。果然,Find_What 传递的东西根本不是日期。幸运的是,这正是我试图捕捉的错误。

但是当我逐步完成时,我发现运行时从 Short_Date = CDate(Format(Find_What, "Short Date")) 跳转到 Short_Date_Error 而不给我错误窗口,而几乎相同的代码(只是用“长日期”代替的“短日期”)具有相同的 Find_What 值,仅下面几行会导致错误窗口。

有谁知道这可能导致什么?

(另外,如果有关于如何搜索日期的任何好的资源,那将是很棒的。我从Google 搜索的结果中得到了这段代码的想法。)

达伦·巴特鲁普-库克

将您的错误处理移到代码主体之外。它应该在 anExit Sub之间End Sub

此代码不会处理Type mismatch错误,也不会显示“长日期错误”或“正在查找”消息。

Sub Test()

    Dim Short_Date As Date
    Dim Long_Date As Date

    On Error GoTo Short_Date_Error
        Short_Date = 1 / 0 'Overflow
        GoTo Long_Date
Short_Date_Error:
    MsgBox "Short Date Error"
Long_Date:
    On Error GoTo Long_Date_Error
        Long_Date = Int("A") 'Type mismatch
        GoTo Date_Find
Long_Date_Error:
    MsgBox "Long Date Error"
Date_Find:
    MsgBox "Finding"

End Sub  

另一方面,这段代码移出代码体,处理错误,然后继续:

Sub Test1()

    Dim Short_Date As Date
    Dim Long_Date As Date

    On Error GoTo Short_Date_Error
        Short_Date = 1 / 0 'Overflow

Long_Date:
    On Error GoTo Long_Date_Error
        Long_Date = Int("A") 'Type mismatch

Date_Find:
    MsgBox "Finding"

Exit Sub
Short_Date_Error:
    MsgBox "Short Date Error"
    Resume Long_Date

Long_Date_Error:
    MsgBox "Long Date Error"
    Resume Date_Find

End Sub  

这个链接似乎有很多关于错误处理的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章