「平成」を感じるもの

 エクセル、アクセスでVBAを自作している者です。コーディング暦5年以上で、フォーム画面も組めるようになりました。
 いまだに理解が進まないのがイベントですが、その中で質問があります。

 かなり時間のかかる処理(例えば30分とか1時間とか)を行う際に、例えば100件処理ごとに「今~件処理しました。」というようなメッセージをフォーム上に表示して、経過を知らせるとともにPCが固まっていないことを確認できるようにしています。(Application.Echoを通常はFalseにして、100件ごとにEcho=Trueに直してからRepaintメソッドで書いて、再びEcho=Falseに戻しています)
 しかし、これもずっとアクセスを表示したままの場合にしか動きません。処理中に別の画面(エクセルとかエクスプローラーとか)を表示して、アクセスに戻ってくると、アクセスはVB実行中で画面の再描画はしてもらえず、処理がすべて終わるまでは白い画面(何も表示されない画面)などが表示されたままになってしまいます。フォームのActivateイベントにも仕込んでみましたが、アクセスに戻っただけではActivateイベントは発生しないようです。

 Applicationオブジェクトや、CurrentProjectオブジェクトにはイベントがないようで、アクセスがアクティブになった場合に、再描画させることができるのかどうか、教えていただければ幸いです。

A 回答 (1件)

あまり自信がないのですが、


REPAINTの前にDO.EVENTをかましたらうまくいきませんか。
感覚として、一度OSに制御を移して再描画になるのでないかと思うのですが。
間違ってたらごめんなさい
    • good
    • 0
この回答へのお礼

ありがとうございます。
DoEventsの機能はヘルプを読んでみたものの、まだ完全に理解できていません。ただ、アドバイスの通りにRepaintの前にDoEventsを置いてみて、うまくいきました。下記のようなコードで動いています。

Private Sub Form_Activate()

DoEvents
Me.Repaint

Exit Sub

お礼日時:2004/12/15 00:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報