|
はじめて投稿します。
VBA初心者です。
処理結果が出るまでに時間がかかるため、
UserFormでプログレスバーを表示して
処理状況を表示するマクロを作成しています。
プログレスバーフォームを以下のモーダレスで起動してます。
Formプログレスバー.Show vbModeless
プログレスバーの更新は以下の関数を処理中に起動して、
DoEventsによって再描画してます。
Sub pro_bar(i, cend, label)
Dim j As Integer
j = i / cend * 100
With Formプログレスバー
.状態ラベル.Caption = label
.パーセントラベル.Caption = Int(j) & "%"
.プログレスバーラベル.Width = .パーセントラベル.Width * j / 100
End With
DoEvents
End Sub
しかし、この方法ですとマクロ実行中にプログレスバー及びExcelがActiveの場合は処理が続行されるのですが、
別のアプリ(メールやエクスプローラー等)にアクティブウィンドウを
移すと、プログレスバーの更新だけでなく、マクロの実行自体も
中断されてしまいます。(CPU使用率が0%になる)。
DoEventsによってOSに一度処理が戻るためだと思うのですが、
メーラー等を見ているときでも、マクロをバックグラウンドで実行し、
プログレスバーも更新されるような実装はできないのでしょうか?
プログレスバーを常にActiveフォーカスにしておかないと処理されないのでは
とても不便でして。。
ご教授よろしくお願い致します。
|
|