2014年12月16日

vba:砂時計の後始末を考えなくていいクラス

長めの処理でカーソルを砂時計(ブルーリング)にする時、たまにエラー時での後始末を忘れて砂時計のままになってることがあるんだけど、後始末を忘れても勝手にカーソルが元に戻るようにはできないものかと、虫のいいことを考えてたらふと思いついた。
クラスにしてコンストラクタで砂時計、デストラクタで元に戻せば、後始末を忘れても関数を抜ければ勝手にオブジェクトが破棄されてデストラクタが呼ばれるから勝手に元に戻ってくれるじゃないか。

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が実行されていないので砂時計のままとなる。が、それでも関数を抜ければオブジェクトが破棄されるのでちゃんと元のカーソルに戻ってくれるという訳。

砂時計以外でも描画停止・警告非表示などで同じようなやり方ができる。
posted by 忘却の達人 at 22:43| Comment(0) | TrackBack(0) | vba | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/410766784

この記事へのトラックバック