2026年10月4日日曜日

Excelマクロの「応答なし」の緩和策

Excelマクロを実行中には、Excel操作ができなくなります。
というのが一般のExcelマクロの認識だと思います。
理由としてはExcelマクロはシングルスレッドで動くから、とよく言われています。
もちろん間違ってはいませんが、javascriptも同じだよねえ、と考えたことはありませんか?
VBAの時代はawaitなどは存在しないけど、同じ悩みは当時もあったはずです。

で、VBAを見てみると、DoEvents関数がありました。
DoEventsを実行した場合、制御をExcelに戻し、キー入力分をすべて処理した後にVBAに制御が戻ってきます。
処理の途中途中でDoEventsを呼び出しておけば、Excelが固まったということは案外避けられるかもしれません。

とはいえ、マクロを使う人だけでなくマクロを作る人も含めて、「Excelマクロを実行中には、Excel操作ができなくなる」
が、みんなの認識として定着しているので、DoEventsを入れた場合にマクロが意図した動きになっていない、ということも多発するんだろうなぁ。


0 件のコメント: