脱力系備忘録BloG ホーム » VBA »EXCELマクロ実行時の「応答なし」を回避する

EXCELマクロ実行時の「応答なし」を回避する  

EXCELマクロで時間のかかる処理を実行させたら、10秒そこらで「応答なし」となってしまう。
プログラムを見直して、何度実行させても実行後ちょっとしたら「応答なし」となる。

件数の問題か・・・?

!メモリか?!と思いリソースモニターを見てみるが、メモリの問題ではなさそう・・・・・・
ん?応答なしと表示されてるが、excel.exeがCPUを使用している・・・。動いているね?これ。
ひょっとしてと思いネットを探ってみると、やはり、EXCELで重いマクロを動かすと表面上「応答なし」となるようだ。
これを回避する方法として、重たいループの中に
DoEvents
という関数を入れると解決。

これで実行してみると、うん。応答なしにならない。
処理カウンターも表示されている。
・・・が、ちょっと重いな。

さらにネットを探ると、重いループ処理をさせるときはEXCELの表示機能を停止させると良いとのこと。
Application.ScreenUpdating プロパティ (Excel)

ループ処理の前に
Application.ScreenUpdating = False

処理後に
Application.ScreenUpdating = True

しかし、これではセルに表示していた処理カウンターが表示されない。
そこで、EXCEL下部のステータスバーに処理カウンターを表示させることにする。
Application.StatusBar = "処理カウント" & curr & "/" & maxdata
同じく処理後に
Application.StatusBar = False

ついでに、ループごとに表示させる必要もないのでdateDiff関数で5秒ごとにDoEventsを呼び出すことにしました。
dateDiff("s", date1, date2)
この関数の注意としては、date2 - date1で計算される点。
おっと、後々勘違いしそうだ。
この関数はタイマー関数ではない。あくまでも日時の差分を取得するだけの関数。

さて、この仕組みを組み込んでマクロを実行したら、、、あはははは。めっちゃ速い。
関連記事

category: VBA

この記事へのコメント

コメントの投稿

非公開コメント

コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。

プロフィール

お問い合わせ

最新記事

最新コメント

▲ Pagetop