重置沙漏的正确错误处理

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.