ゴミ箱に入れずに削除する(Windows)

2019年09月21日

画面の更新がされていない(Office365 エクセルVBA)

明らかに、エクセルVBAのバグだが・・・・。



このブログへの投稿も久しぶりですが。
エクセルのバージョンが上がるにつれ(あるいはOSのバージョンが上がるにつれか?)、
とにかく画面の書き換えがうまく行っていないことによる不具合が多くなっているように
思います。

永年稼働させていて、なんの不具合もなかったエクセルVBAプログラムで、
突然、次のようなエラーが発生しました。
「Visibleプロパティが設定できません・・・・云々」

常に出る訳でなく、再現がなかなか出来ず苦慮していました。

このプログラムは、ユーザフォームのあるテキストボックスに値が入力され、
Changeイベントが発生すると、
同じユーザフォーム内のにあるフレームのVisibleプロパティがTrueになる仕組みです。

実は、このテキストボックスに全角の漢字が入力されたときには、正常に動くのですが、
同じ全角でもアルファベットや数字などを入力すると、
プログラムでは上記のフレームのVisibleがTrueになっているのに、
実際にはTrueになっていないで、上のようなエラーになることが分かりました。

文字種によって、イベントの動きが変わるようなコードは書いていないので、
これは明らかにエクセルVBAのバグとしか言いようがありません。

そこで考えられるのは、例えば上記でフレームのVisibleがFalseからTrueになると言うことは、
そこでユーザフォームの書き換え(更新)が行われるという事ですから、
どうやら、なにか理由は分かりませんが、なんらかの状態の時に、
こうした書き換えが行われていない、という事のようです。
確かめてみると、このような状況が発生した時に、
プログラム上、上記フレームのVisibleをTrueにした後で、
そのフレームのVisibleプロパティを確認すると、Falseのままでした!!

そこで苦肉の解決策ですが、
フレームのVisibleのプロパティをTrueにする前に、
Me.Hideでいったんユーザフォームを非表示にし、
続いて
Me.Showでもう一度表示し、
それから、フレームのVisibleプロパティをTrueにして見ました。

なんと、画面はややギクシャクになりますが、この2行を加えただけで、
見事に解決となりました。

結局、画面のリフレッシュを強制的に行った、と言うような事ですが。

こうしたことは、シートの内容を変更している場合でも起こることが有ります。
セルにVBAから入れた値が表示されていないとか。
こんな時でも、Application.ScreenUpDateのFalseとTrueを続けで行うだけで、
解決する事があります。

どうもWindows7あたりからでしょうか、画面の更新がうまく行かない事が多いと思います。
例えば、エクスプローラでファイルを削除しても、そのファイル名が表示されたまま、
という事ありませんか?こんなときF5で画面をリフレッシュすると消えますね。

WindowsにしてもOffice製品にしても、なんだか、悪い方悪い方に進んでいるように感じるのは、
私だけでしょうか?


katsuyausami at 02:42│Comments(0)エクセルVBAメモ 

コメントする

名前
 
  絵文字
 
 
ゴミ箱に入れずに削除する(Windows)