プロが教えるわが家の防犯対策術!

ExcelVBAでUserFormを使用した4画面ばかりのツールを作成中です。
質問ですが、あるコマンドボタンを押下した時に、既存のExcelファイルを複数開き、集計などを行い、結果をCSVファイルに出力するという処理を行っています。
処理には、10分位の時間を要するので、その間は、UserFormに「現在処理中のファイル名、処理が終了したファイル名」などの進捗をラベルに表示したいのですが、実際に実行してみると、Excelファイルを開いた時点で、制御がExcelファイル側に入ってしまい、UserFormが真っ白に表示されてしまいます。
常に、「UserForm」をアクティブにし、目的の進捗状況ラベルに表示しながら、集計処理を実行することはできるのでしょうか?
どなたかご存知の方、教えてください!!

A 回答 (1件)

こんばんは。



>Excelファイルを開いた時点で、制御がExcelファイル側に入ってしまい、UserFormが真っ白に表示されてしまいます。

やってみましたが、再現性がないですね。ただ現象はわかります。大きな処理のものでないと出ないようです。たぶん、制御がExcelのブック側に入るのではなくて、Userform の画面の戻りができなくなって、Excelのブック側に取られているのではないでしょうか?

UserForm を開いていて、ふたたびアクティブにするのは、
 Workbooks.Open (FileName)
 myTitle = Me.Caption
 AppActivate (myTitle)

なんていうことをしますが、なんとなく、こういうことではないような気がしています。もう少し、全体的な処理なんだろうなって思います。ブック自体を Visible = False にしてしまい、処理が終わったら、戻るようなほうが、なんとなく楽なような気がします。

あんまり姑息なことをすると、ハングしそうな気がします。

それから、進捗状況は、

http://oshiete1.goo.ne.jp/kotaeru.php3?q=405615
#3

出典: 『かんたんプログラミング Excel VBA コントロール・関数編』大村あつし著 (技術評論社)第二章の中の、「ラベルをプログレスバーとして利用する」

なんていうのが、Excelでラベルをプログレスバーに使う方法があります。ただ、状況にもよりますから、メモリ喰いなるようだったら、あまり賛成できないです。

一度、作動中のメモリを監視したほうがよさそうです。
    • good
    • 0
この回答へのお礼

的確なアドバイスをありがとうございます。
ご指摘の通りで、とっても負荷がかかる処理を行っています。
提示していただいたURLを参考にしてみます。

どうもありがとうございました。

お礼日時:2005/07/12 09:40

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