- 締切済み
エラー91 オブジェクト変数またはブロック変数が設定されてません
こんにちは、VBであるホームページにアクセスして自動的にソースから内容を取得するプログラムを作成しているのですが、エラー91(オブジェクト変数またはブロック変数が設定されていません)が出て困っています。 しかも、同じ処理内容なのに、時間によってエラーが出るときと出ないときがあり、困っています。コード(一部)は、以下のようになっています。 Dim objIE As Object Dim a As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "サイトのURL" Do While objIE.Busy = True DoEvents Loop On Error GoTo Error2 a = objIE.Document.body.innerHTML ……(1) On Error GoTo 0 (1)のところで、8回に1回くらいの割合で止まります。[デバッグ]を押してすぐにまた再生ボタンを押すと、実行できます。そこで質問なのですが、 (1) エラーの原因は何でしょうか? objIEの中味が読み込み途中(IEなので処理時間がかかる)なのに参照しようとしてるからでしょうか?(でもちゃんとBusyプロパティで…) (2) Busyプロパティは「重要なページを読み込んでいる」というプロパティということですが、そのURLの全ての情報を読み込んだかどうか、というようなプロパティはないのでしょうか? (3) On Errorが通用しません。On Errorでジャンプ先を指定しているのに、Error:の箇所にジャンプしないことが2回に1回くらいあります。なぜでしょうか。 よくある質問かと思いますが、調べてもよくわかりません。ひとつでも分かりましたら、ぜひ教えてください。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
Wizard_Zeroと申します。 個人的にはBusyやReadyStateの変化をLoopで待つのはあまり好ましくないと思います。 以下のようにすれば、ダウンロードの完了をイベントで通知してもらうことが出来ます。 ※ 参照設定で「Microsoft Internet Contols」にチェックをつけてください。 Private WithEvents objIE As WebBrowser Private Sub Command1_Click() Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "(サイトのURL)" End Sub Private Sub objIE_DocumentComplete(ByVal pDisp As Object, URL As Variant) Dim a As String a = pDisp.document.body.innerHTML End Sub
- toshiman
- ベストアンサー率0% (0/2)
(2)のすべての情報を読み込んだかどうか・・・の件ですが、 ReadyStateプロパティはどうでしょうか? InternetExplorerオブジェクトの例ではないのですが WebBrowserオブジェクトで以下のような掲示板の記事を見かけました。 http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200312_03120063.html 実際に試したわけではないので自信はありませんがご参考までに。
- todo36
- ベストアンサー率58% (728/1234)
単にソースを取得するだけなら Internet Transfer ControlかInternetReadFile(Wininet.dll)でやればいいでしょう
補足
ありがとうございます。 それも調べてみたいと思います。