フォームを再描画する
時間がかかる処理を実行すると、その間はAccessが応答しなくなるため、フォームに表示されている内容が正しく表示されません。

このようなケースでもフォームを正しく表示したいときは、Me.Repaintを使いフォームを再描画することで、フォームに表示されている内容を保つことができます。
Me.Repaintの使用例
次のサンプルは、Me.Repaintプロパティを使って、フォームの再描画を行う例です。このサンプルでは、ボタンのイベント「クリック時」に記述しています。

VBAの処理を実行中にAccessのウィンドウやフォームが再描画されるタイミングは、通常はAccessにイベントが返るメソッド(DoCmd.GoToPageMsgBoxなど)を実行したときです。

このサンプルでは、Do〜Loopを使ってAccessにイベントが渡らない状態を(むりやり)作り、Me.Repaintメソッドを実行しフォームのみを再描画しています。ただし、Accessのタイトルバーやツールバーなどフォーム以外の部分は再描画されません。

Private Sub コマンド5_Click()

    Dim lngStart As Long

    lngStart = Timer

    '5秒待機します
    Do Until Timer - lngStart > 5
       'フォームを再描画します
       Me.Repaint
    Loop

End Sub
 注:日付が変わるタイミングで実行すると永久ループしますので注意してください
Copyright(C) 1999-2006 結城圭介。 All rights reserved