クラスにしてコンストラクタで砂時計、デストラクタで元に戻せば、後始末を忘れても関数を抜ければ勝手にオブジェクトが破棄されてデストラクタが呼ばれるから勝手に元に戻ってくれるじゃないか。
Access用のクラス
クラス名:HourglassOn
Option Compare Database
Option Explicit
Private Sub Class_Initialize()
DoCmd.Hourglass True
End Sub
Private Sub Class_Terminate()
DoCmd.Hourglass False
End Sub
----------------------------------------------
'処理を行う関数
Sub HogeHoge()
On Error GoTo error_proc
With New HourglassOn 'End Withまで砂時計
あれやこれやの処理
End With
MsgBox "終わったぞっ", vbInformation
exit_proc:
Exit Sub
error_proc:
MsgBox Err.Description, vbCritical
Resume exit_proc
End Sub
-----------------------------------------------
この処理は通常は With〜End With の中だけ砂時計になる。但し例外エラーが発生してGoToで With文を抜けた場合は、End Withが実行されていないので砂時計のままとなる。が、それでも関数を抜ければオブジェクトが破棄されるのでちゃんと元のカーソルに戻ってくれるという訳。
砂時計以外でも描画停止・警告非表示などで同じようなやり方ができる。