• ベストアンサー

Accessで処理経過を表示したいのですが

Accessでcsvデータを自動的に読み込み、テーブルに追加するマクロを作成したのですが、読み込むcsvファイルの数も容量も大きいため時間がかかります。(数分) このため、マクロの処理中はフリーズ状態となりタイトルバーに(応答無し)と出てしまう場合があります。 そこで、ポップアップダイアログのようなものを表示させて途中経過を表示させたいのですが良い方法はないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Nii
  • ベストアンサー率48% (79/162)
回答No.2

マクロではどうするのかは不明ですが、モジュールでは、DoEvents 関数を使ってオペレーティング システムに制御を渡す事が可能です。 長らくAccessを使ってないので、あってるか自信が無いのですが・・・ DoCmd.OpenForm "処理中メッセージ" Forms("処理中メッセージ").text.Value = "処理1実行中" DoCmd.RepaintObject acForm, "処理中メッセージ" DoEvents 処理1・・・ Forms("処理中メッセージ").text.Value = "処理2実行中" DoCmd.RepaintObject acForm, "処理中メッセージ" DoEvents 処理2・・・  ・  ・ DoCmd.Close acForm, "処理中メッセージ" DoCmd.OpenForm "処理終了メッセージ" な感じかな? 実際には、フォームへのテキスト代入からDoEventsをサブにして、テキストも複数用意して、履歴を見えるようにして・・・ Forms("処理中メッセージ").text4.Value = Forms("処理中メッセージ").text3.Value Forms("処理中メッセージ").text3.Value = Forms("処理中メッセージ").text2.Value Forms("処理中メッセージ").text2.Value = Forms("処理中メッセージ").text1.Value Forms("処理中メッセージ").text1.Value = "処理1実行中" DoCmd.RepaintObject acForm, "処理中メッセージ" DoEvents で、テキストはフォントを段々と小さくしていくと、流れてるように見えるかも・・・

flowergoo
質問者

お礼

うまくいきました! PepaintObjectとDoEventsで再描画が掛かるのですね。 大変役に立ちました、ありがとうございます。

その他の回答 (1)

noname#140971
noname#140971
回答No.1

一介のデザイナーでプログラマではないのですが・・・。 1、 定期的にマクロが占有している制御をオペレーティング システムに渡す必要がありそうです。 2、そこで進行の表示を更新すればいいのではと推察します。 思うに、フロー制御関数を組み込める形にマクロを修正する必要がありそうです。

flowergoo
質問者

お礼

おっしゃる通りですね。 マクロ実行中はマクロが制御を独占してしまうので、表示を行うためにはOSにも渡す必要があることが分かりました。 ありがとうございます。

関連するQ&A