こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Visual BasicでIEを操作したい

Visual Studio 2019のVisual Basicで下の関数を実行すると、1回目は指定したurlのタイトルとhtmlが取得できますが、2回目はhtmlを読むie.Document.all(0).outerHTMLがエラーになります。エラーメッセージは
System.NotSupportedException: 'HRESULT からの例外:0x800A01B6'
です。タイトルを読むie.LocationNameは何回でもエラーなく取得できます。また、従来はEXCELのVBAでほぼ同じことが問題なくできていました。

 下記のコードをどう直せばいいか、またはなにか参照を追加すれば解決するか、分かりましたら教えてください。下のコードは質問のために単純化してあります。目的のコードではopen,wait,read,closeが別の関数になっていて、open,wait,closeは何回繰り返しても問題なく動作します。またreadが2回目でエラーと言うのは取りに行くurlを変更してもしなくても結果は同じです。

Dim ie As Object

'open
ie = CreateObject("InternetExplorer.Application")
ie.navigate(UrlText)
ie.Visible = True

'wait
Do While ie.Busy = True Or ie.readyState <> 4
System.Windows.Forms.Application.DoEvents()
Loop

'read
TextBox2.Text = ie.LocationName
TextBox3.Text = ie.Document.all(0).outerHTML

'close
ie.Quit()
ie = Nothing

投稿日時 - 2019-07-28 22:57:44

QNo.9640174

困ってます

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

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

その分コードの可読性は低くなりますが、ieのような大きな外部ソフトを制御する場合は、ありがちなやり方だと思います。以上、参考にならなかったらごめんなさい。

投稿日時 - 2019-07-28 23:54:28

補足

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

投稿日時 - 2019-08-03 16:53:33

お礼

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

投稿日時 - 2019-07-29 08:16:49

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)