”ポイ活”と同様、暇に任せてエクセルのマクロ作成、各種テクニック習得を日々行っているのだが、最近あるプログラムを動かすとエクセルがおかしな動作をするようになってしまった。
具体的には、数秒おきに画面がちらつき、画面に表示されていたテンポラリーの入力が消えたりする。
そしてよく観察すると、
マクロ実行中でも無いのにも関わらず、画面のチラつきと同時に上の画像にあるように、”実行中”の表示が”一瞬現れて消える”のを繰り返す。
その状態で他のマクロを動かすと、まあ動くことは動くのだが、時々妙な挙動をする事もあるので、少々心配なので、本日しっかりと調査してみたところ、ようやく原因が分かったので、自分の備忘録として記載しておく。
結論!
原因はUserFormのUnloadで、
あるUserFormを使用する際に、
この様に、UserFormのイニシャライズ時に8秒後にSub HIDEForm1( )でUnloadする様に指定しておき、実際のマクロ内で
UserForm.Showの3秒後にUnloadを書いておくとこの不具合が発生する!
これはUnloadでは無く、Hideでも同じ事象が発生した。
要するに、UserForm1.UnloadでUserForm1が無くなっているにも関わらず、Application.OnTime Now + TimeValue("00:00:08"), "HIDETheForm"で消そうとしているため、そのプログラムが残ってしまっているようだ。
この不具合の解消方法としては、エクセルを再起動すればもちろんOKだが、発生している時に再度UserFormをマクロで表示して、Stopを掛けると、
何やら、以前マクロで動作させていたApplication.OnTime Now + TimeValue("00:00:08"), "HIDETheForm"が機能する様で、
このエラーが1回、2回?発生するので、その都度”OK”を押してエラー処理を行うと解消する。
この不具合、バグ!はエクセル2019で発生するが、他のVersionで発生するかどうかは未確認。
もしかすると、UserFormのUnloadに限らず、Application.OnTime Now + TimeValue("00:00:0*"), "*****"で動作するものが無い、とかでも発生するのかもしれない。