プロが教えるわが家の防犯対策術!

こんにちは、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回くらいあります。なぜでしょうか。

よくある質問かと思いますが、調べてもよくわかりません。ひとつでも分かりましたら、ぜひ教えてください。よろしくお願いします。

A 回答 (3件)

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
    • good
    • 0

(2)のすべての情報を読み込んだかどうか・・・の件ですが、


ReadyStateプロパティはどうでしょうか?

InternetExplorerオブジェクトの例ではないのですが WebBrowserオブジェクトで以下のような掲示板の記事を見かけました。

http://homepage1.nifty.com/MADIA/vb/vb_bbs2/2003 …

実際に試したわけではないので自信はありませんがご参考までに。
    • good
    • 0

単にソースを取得するだけなら



Internet Transfer ControlかInternetReadFile(Wininet.dll)でやればいいでしょう

この回答への補足

ありがとうございます。
それも調べてみたいと思います。

補足日時:2005/02/10 13:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!