gpt4 book ai didi

vba - 为什么只有我的VBA错误处理程序之一处理错误?

转载 作者:行者123 更新时间:2023-12-03 08:06:42 26 4
gpt4 key购买 nike

这是一个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,而没有给我错误窗口,而几乎是相同的代码(只是带有“Long Date”)具有相同Find_What值的“短日期”的结果,仅以下几行会导致错误窗口。

有人知道是什么原因造成的吗?

(此外,如果有什么很好的资源来寻找日期,那将是很棒的。我从 the result of a Google search那里获得了这段代码的想法。)

最佳答案

将错误处理移至代码主体之外。它应该介于Exit SubEnd Sub之间。

此代码不会处理Type mismatch错误,并且永远不会显示“Long Date Error”或“Finding”消息。

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

关于错误处理,这个 link似乎有很多。

关于vba - 为什么只有我的VBA错误处理程序之一处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50492777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com