【Excel】VBAを実行すると”応答なし”が表示される場合の対処

Excel
スポンサーリンク

Excelマクロ実行時の”応答なし”を解除する方法

単体テストでは、問題なかったがモジュールを組合わせて連続で実行すると、よく出現する現象でプログラムが正常終了すると、またExcelに制御が戻り復活するが、あまり気持ちの良いもんではないのと、ホワイトアウト中は、マクロを{ESCキー}で終了させることが出来ない。

修正手順

  • 使用しているVBAモジュール内に一番処理時間が掛かっていそうなLoop処理を探す
  • DoEvents 関数を1行挿入する(ループ内でしか利用できないので注意!)

VBAサンプルで説明 「DoEvents 関数」 挿入箇所

sub loop_test
Dim i as integer,j as integer
    for i=1 to 12
        for j=1 to 1000
            Cells(j + 1, i) = (i - 1) * 1000 + j
            '''処理省略

        next j
    next i
end sub

上記サンプルを単体実行するとエラー表示はしないが、複数のモジュールを繋げて実行するようなモジュールを作成しそれを実行すると、 Excelタグに”応答なし”と表示されホワイトアウトする。この場合繋げたモジュールを1つ1つ確認した中で、Loop処理が一番長いこのモジュールでエラーになっていると考えるのが妥当。

DoEvents 関数を挿入するだけだが、どこに入れるか?

sub loop_test
Dim i as integer,j as integer
    for i=1 to 12
     ➀
        for j=1 to 1000
     ➁
            Cells(j + 1, i) = (i - 1) * 1000 + j
            '''処理省略

        next j
    next i
end sub
「DoEvents関数」はLoop内でなければ効果がない!

「DoEvents関数」はLoop内でなければ効果がない!

ので、上記サンプルだと➀か➁ということになる。

  • ➀に入れてテスト
  • これでもまだエラーが出るようなら➁に入れてテスト
  • これでもまだエラーが出る場合はこのモジュールではないと判断
  • 違うLoop処理を使っているモジュールを探し出し、同じ手順でエラーがなくなるまで探す

といった具合で該当するモジュールを発見し「DoEvents関数」を埋め込み対処する。

自分でVBAを使うだけならExcelのホワイトアウトは大きな問題ではないが、

対処の仕方を知っているのと知らないのとでは、仕事する上では信頼度が大きく変化する。

編集後記

ExcelVBA本(プログラミング本)の選び方のコツ

  • 近くの大きな書店で実物を閲覧(コレが一番良い)
  • 巻末の索引で「自分の探している命令」が載っている

が、そもそもデカい本屋が近くにない!という場合は?

  • Kindle-Unlimitedで物色するのが一番簡単で速い
  • 巻末の索引で「自分の探している命令」が載っている

巻末が見れない場合は、目次で当たりを付けるしかない。

  • Kindle試し読み
  • 自分の探している命令が目次にある
  • それらしき文言から推測する
  • ビンゴで命令がなければメモしておき本屋訪問時に一気買い

これが★を参考にするよりも自分の正解に辿り着く、一番の近道となる!

今回の記事だと、「DoEvents関数」なので、コレが載っている本を探すことになる。

PC処理の半自動化

最近、自作の競馬データの不具合を発見することが多く、その都度データ修正しプログラム更新しているのだが、どうせならと思い「Power Automate Desktop」を使用してみた。

が、まだまだ実用化するにはスキルとサンプルが足りないと感じる。

サンプルがそれなりに出てくると使える状況になってくるかもしれない。が、

今はググってもヒットするのが実用するにはほぼ使えない「Youtube」ばかりで、まだUWSCの方がマシといった印象を受けた。🤖

それでも一度それなりにテストした感触から、かなり期待はしているし組合わせて利用する日もあるかもなぁ~という感じ。少なくともWindowsユーザーでいる内はPythonよりも近いところにはいる。

それでは、またね~~😎

タイトルとURLをコピーしました