• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Visual BasicでIEを操作したい)

Visual BasicでIEの操作方法に関するエラーの解決方法を教えてください

このQ&Aのポイント
  • Visual Studio 2019のVisual BasicでIEを操作する際に発生するエラーについて解決方法を教えてください。
  • 指定したURLのタイトルとHTMLを取得する関数を実行すると、1回目は成功しますが、2回目はエラーが発生します。
  • エラーメッセージはSystem.NotSupportedException: 'HRESULT からの例外:0x800A01B6'です。タイトルの取得は問題ありませんが、HTMLの取得ができません。

質問者が選んだベストアンサー

  • ベストアンサー
  • skp026
  • ベストアンサー率45% (1010/2238)
回答No.1

以下はPowerShellですが、同じエラーが出ています。 https://blog.daruyanagi.jp/entry/2017/04/30/155040 使用するメソッドを変えることでも動作できたようですが、PowerShellでも出ない場合もあるようなので、タイミングの問題の可能性が考えられます。例えば今回でしたらDoEventsではieが処理しきれていないか、ieが受け取るべきイベントが受け取れてないのかもしれません。open以降はタイマーを起動させてタイマーのイベント内でBusyやreadyStateを見て、その結果により分岐するというやり方はいかがでしょうか。 その分コードの可読性は低くなりますが、ieのような大きな外部ソフトを制御する場合は、ありがちなやり方だと思います。以上、参考にならなかったらごめんなさい。

noname#252332
質問者

お礼

 回答ありがとうございます。作ろうとしている本来のプログラムは、open、read、closeの機能が独立したボタンで呼ばれるようになっており、waitは実際はインターバルタイマーの中でステータスを表示する仕掛け(待たない)になっています。openで得たオブジェクトを Dim IeObject(10) As Object で受け渡しており、複数のページを同時に開きたいと言う意図です。従来VBAで作っていましたが、運転中は他のEXCELが開けないとかタイマーが使えないなど不満があり移植中です。元のプログラムではボタンでひとつずつ動かしているので、それぞれの機能の時間は充分に開いています。また最後の ie.Quit() ie = Nothing の間に0.5秒待つサブルーチンを入れてあったのですが質問のために取りました。結果は同じです。タイトルは取得できてる、また1度目と2度目のどこが違うか着目して動作を見れればいいのでしょうが私がVisual Basicが出来ないので行き詰っています。

noname#252332
質問者

補足

InternetExplorerのオートメーションについては答えが見つからなかったのですが、方向転換してツールボックスのwebbrowserをフォームに張り付けてやってみるとこちらは簡単に動きました。スクリプトエラーが出るサイトでもプロパティのScript Errors Suppressedをtrueにすることで続行でき、当面のところはうまくいきました。どこまで行けるか分かりませんがこちらでやってみようと思います。また何かありましたらよろしくお願いします。

関連するQ&A