| 
    
     |  | はじめて投稿します。 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フォーカスにしておかないと処理されないのでは
 とても不便でして。。
 
 ご教授よろしくお願い致します。
 
 
 |  |