重置沙漏的正确错误处理
proper error handling for resetting Hourglass
我有一个项目,其中包含多个
DoCmd.Hourglass -1
<various code>
DoCmd.Hourglass 0
<other code>
任何时候出现错误,都会跳过关闭沙漏的行。用户感到困惑并等待应用再次准备就绪。
通常情况下,我会尝试处理这个...最终
try {
DoCmd.Hourglass -1
<various code>
} finally {
DoCmd.Hourglass 0
}
但这不是 VBA 中的一个选项。
我原以为搜索并找到正确的方法是一件简单的事情,但我发现的每个样本都采用了上面的朴素方法。
诀窍是我不想影响任何现有的程序流程,这意味着我需要重新抛出错误。
当然,“throw”也不存在。
但这也意味着我不需要从发生错误的地方恢复。
这是我目前的最佳猜测
On Error GoTo ErrHandler
DoCmd.Hourglass -1
<various code>
DoCmd.Hourglass 0
<other code>
Exit Function
ErrHandler:
DoCmd.Hourglass 0
Err.Raise Err.Number
End Function
但我没有信心这是最好的解决方案。
看来问题在这里得到了回答:
err.raise Err.Number
This is the correct method, and no, you don't have to re-state all the err properties. The values are retained.
我有一个项目,其中包含多个
DoCmd.Hourglass -1
<various code>
DoCmd.Hourglass 0
<other code>
任何时候出现错误,都会跳过关闭沙漏的行。用户感到困惑并等待应用再次准备就绪。
通常情况下,我会尝试处理这个...最终
try {
DoCmd.Hourglass -1
<various code>
} finally {
DoCmd.Hourglass 0
}
但这不是 VBA 中的一个选项。
我原以为搜索并找到正确的方法是一件简单的事情,但我发现的每个样本都采用了上面的朴素方法。
诀窍是我不想影响任何现有的程序流程,这意味着我需要重新抛出错误。
当然,“throw”也不存在。
但这也意味着我不需要从发生错误的地方恢复。
这是我目前的最佳猜测
On Error GoTo ErrHandler
DoCmd.Hourglass -1
<various code>
DoCmd.Hourglass 0
<other code>
Exit Function
ErrHandler:
DoCmd.Hourglass 0
Err.Raise Err.Number
End Function
但我没有信心这是最好的解决方案。
看来问题在这里得到了回答:
err.raise Err.Number
This is the correct method, and no, you don't have to re-state all the err properties. The values are retained.