ボロボロ皇帝のボロ切れと塊

ボロボロ皇帝が悪態、嫌み、好み、何でも己の視点だけで自由に吐く「偏」な場所。たまにExcel、家電、音楽等についても好きに吐いてる。

ボロボロ皇帝が悪態、嫌み、好み、何でも己の視点だけで自由に吐く「偏」な場所。
Excel、家電、音楽、ゲームイラスト小説映画、性癖について等、何でも好きに吐いてる。

どうでも良いかもしれんが背景色変わっていくの見てくれ。
更にどうでも良いかもしれんがアイコンが息してるの見てくれ。


我輩は何にも制約されない身、
「耐えぬ」事を恐れないと決めたのだ!
我輩は好きなときに悪態をつく!
妬み僻み嫉みを背負い、
マイナーだろうが邪道だろうが
我輩は我輩の道を行く!
好きなものは懸命で不器用な諸君,
嫌いなものは器用で完璧を気取った奴らだ。
         

【VBA】IE操作で特定PCのみオートメーションエラーが発生したときの対処法

※レガシーブラウザIEを、VBAマクロで自動操作してる諸君向け。

VBAで作成した社内ツールに、

Excel.Application非表示状態UserFormのみ表示→UserFormの中の1つのボタンを押すとIEバックグラウンドで起動完全に読み込まれてから次のコードに移る

という動きをするものがある。

読み込み完了待機には、

    Do While ie.Busy = True Or ie.ReadyState <> 4
    Loop

を挟んでいるのだが、急に、特定のPCのみでエラーが発生する状況になった。
(というより結構前からエラーが出ていたようだが、気づいていなかったか忘れていたために対応が遅れた)

 

エラー内容は、

オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。 

である。

※エラーはタイミングによって特定不可となったり変わったりしたが、上のエラーが正規。

 

他PCでは問題ないため、原因が分からず色々検索。

結果、
Set ie = CreateObject("InternetExplorer.Application")

Set ie = New InternetExplorerMedium

にするか(Mediumとかいうのは整合性レベルを表してるんだと。表記しない場合、基本は低(Low)になるらしい)、

IE保護モードをオンにするかのいずれかで対処可能。

ということがわかった。

※遷移先URLが「信頼済みサイト」に登録されていても発生したりするらしい。

 

一応、
保護モードがオンなら

Set ie = CreateObject("InternetExplorer.Application")

保護モードがオフなら

Set ie = New InternetExplorerMedium

と言うことになっているとかなんとかだが、

保護モードを片っ端から全てオンにした状態で(インターネット・ローカルイントラネット・信頼済みサイト・制限付きサイト)、
Set ie = New InternetExplorerMediumにして試してみたが、問題なく動いており、

逆にそのエラーが出ていたPCの保護モードを全解除状態(元はインターネット→保護モードがオフだった)で
Set ie = CreateObject("InternetExplorer.Application")に戻し起動させても、全くエラーがでなくなったため意味が分からん状態に。

 

どういう事かが分からず、実はNew InternetExplorerMediumは保護モードオンでも互換があってうまい事うごいているのか?!と検索してみたものの、よくわからず。どっちかと言えばデフォルトの低のほうが互換あるっぽいような?

それとも、整合性レベルを明示することが大事なのか?

 

…まあいい(分からん)。

とりあえず切り替えればエラー回避できたので、何でや!と発狂寸前の諸君は試してみることをおすすめする。
※一応一時的な改善とかまぐれだったりしないか、念の為後日確認→問題無しだった。
※現在New InternetExplorerMedium 己の席の保護モードは全オン これで動いている。なんやのマジで…。

 

使うかもしれん備忘録
READYSTATE_INTERACTIVE  …  3    IEオブジェクトの操作可能状態
READYSTATE_COMPLETE  …  4    IEオブジェクトの全データ読み込み完了状態