VBからブラウザの表示状態を確認する方法

このQ&Aのポイント
  • Visual Basic(ExcelVBAですが)からブラウザを操作する方法として、こちらのコーナーからいろいろとアドバイスをいただいて徐々に理解できてきたのですが、ブラウザの表示状態を調べるパラメータ、プロパティなどはあるのでしょうか。URLを指定してブラウザに表示させ、そのURLが存在するかどうかをチェックしたいです。
  • 正常に表示された場合と、指定したURLが存在せずにエラーになる場合がありますが、エラーの場合も、(1)ブラウザが完全にエラーを出す、(2)ドメイン側で存在しないというメッセージのページを返す、という2通りがあり、判定が難しそうです。そもそもこれを一般的に識別することは無理なのでしょうか。
  • (1)ブラウザがエラーを出す例 http://www.goo.ne.jp/nai/ (2)goo側で存在しないというメッセージを返す例 http://weather.goo.ne.jp/today/x003/index.html
回答を見る
  • ベストアンサー

VBからブラウザの表示状態(リクエストURLの存否)を確認するには

Visual Basic(ExcelVBAですが)からブラウザを操作する方法として、こちらのコーナーからいろいろとアドバイスをいただいて徐々に理解できてきたのですが、ブラウザの表示状態を調べるパラメータ、プロパティなどはあるのでしょうか。URLを指定してブラウザに表示させ、そのURLが存在するかどうかをチェックしたいです。 Sub urlchk() Dim tagURL As String Dim objIE As Object tagURL = "http://goo.ne.jp/" Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate tagURL Do While objIE.Busy = True DoEvents Loop Stop 'この時点で、ブラウザの表示状態を調べたい End Sub 正常に表示された場合と、指定したURLが存在せずにエラーになる場合がありますが、エラーの場合も、(1)ブラウザが完全にエラーを出す、(2)ドメイン側で存在しないというメッセージのページを返す、という2通りがあり、判定が難しそうです。そもそもこれを一般的に識別することは無理なのでしょうか。 (1)ブラウザがエラーを出す例 http://www.goo.ne.jp/nai/ (2)goo側で存在しないというメッセージを返す例 http://weather.goo.ne.jp/today/x003/index.html

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

すいません、 #3で、onreadystatechange が使えると書いていますが、 実際に試してみたところ、ExcelVBA からは、利用できないようです。 Do While req.readyState <> 4 DoEvents Loop のようにして下さい。

dKacho
質問者

お礼

BLUEPIXYさん、何度もありがとうございました。 No.4でアドバイスいただきました方法でバッチリ動きました。 本当に助かりました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2>objIE.Busyみたいに読み込み中であることを返すプロパティはないんでしょうか? readyState が 3 の時通信中 4 の時完了 になるので、これをチェックするといいのですが、 onreadystatechange イベントが使えるので、イベントによるコールバックを使うのがポーリングするより良いと思います。 参考URLは、JScript によるサンプルですが、基本的には同じです。

参考URL:
http://okwave.jp/kotaeru.php3?qid=1674965
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

CreateObject("Microsoft.XMLHTTP") を使ってHTTPリクエストを出すことができます。 この場合、status プロパティを使ってサーバーが返してくるステータスコード statusText でその意味する英文を得ることができます。 でも、二度手間になるような気もするし そこまでする必要も無いような気がします。 http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/obj_xmlhttprequest.asp

dKacho
質問者

補足

ありがとうございます。 Statusを取ることはできましたが、応答に時間がかかってStatusが返ってこないままになるケースもあります。   objReq.Open "GET", ActiveCell.Offset(0, 1).Text   objReq.send   Do While ActiveCell.Text = ""     ActiveCell.Value = objReq.StatusText     If ActiveCell.Text = "" And Now > wt Then       ActiveCell.Value = "Time Out"       Exit Do     End If   Loop みたいなコードを書いてみましたが、objIE.Busyみたいに読み込み中で あることを返すプロパティはないんでしょうか? (URLのタイプミスを無くすため、システマチックにチェックしたいのです。)

noname#27115
noname#27115
回答No.1

帰ってきたhtmlなりtextに "Not Found" や "The requested URL /nai/ was not found on this server." や "指定されたページがみつかりませんでした。" などの含まれる文字列で判定するってのではダメですか?

関連するQ&A

  • ショートカットをブラウザに表示させたい

    ブラウザにhttp://www.yahoo.co.jp/を表示させて ヤフーのアイコンをデスクトップにグイって持って行けば デスクトップにヤフーのショートカットが出来ますが このショートカットファイルをVBAで開くことは可能ですか? ショートカット名は「Yahoo! JAPAN」となっています。 Sub sample() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "Yahoo! JAPAN" Set objIE = Nothing End Sub と言うように立ち上げられたらと思うのですが ショートカットのURLを読み取る方法はありますか? Sub sample() Dim ファイル名 As String ファイル名 = "C:\Documents and Settings\◎◎\デスクトップ\Yahoo! JAPAN" CreateObject("Shell.Application").ShellExecute ファイル名 End Sub こっちの方法では、「見つかりません」 と言うエラーになってしまいました。 今回の例題はヤフーだからわかりやすいのですが 実はフォルダに色々なサイトのショートカットを貯めており、 それをVBAで開けたら便利だなと思っています。 お気に入りフォルダみたいな感じになっています。

  • 【アクセス】リンク切れかどうかをVBAで取得したい

    テーブル1のフィールド1をハイパーリンク型にし、 アドレスを「http://www.yahoo.co.jp/」と入力し、保存しました。 そのレコードをクリックすると、ヤフーのHPが開きます。 しかし、アドレスを「//www.yahoo.co.jp/」とした場合、 もちろんURLは開けません。 エラーメッセージが出たあとに 『「//www.yahoo.co.jp/」を開くことができません。 指定されたファイルを開くことができません。』 と再度エラーメッセージが表示されます。 このエラーが表示されるかどうかの結果をvbaで取得するのは可能でしょうか? わざとエラーを発生させるために Sub test() Dim ObjIE As Object Dim URL As String Set ObjIE = CreateObject("InternetExplorer.Application") URL = "http://www.co.jp/"’←ここの部分はあとでレコードの情報を読み取るコードを考えます。 ObjIE.Navigate (URL) ObjIE.Visible = True Set ObjIE = Nothing End Sub としてみましたが IEが開き、「Inernet Explorer ではこのページは表示できません」 となりますが、、エラーページかどうかの情報はvbaでは取得できません。 この場合、どうすればいいのでしょうか? ご教授よろしくお願い致します。

  • IEブラウザよりmsgboxを手前に表示したい

    当方 IE9+2007です。 Sub yahoo() Dim objIE As Object Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do Until objIE.Busy = False And objIE.ReadyState = 4: Loop If objIE.Document.Body.innerHTML Like "*こんにちは、*さん*" Then i = MsgBox("別のIDでログインしています!続けますか?", vbYesNo + vbApplicationModal) If i = 7 Then End End If End Sub このような事がやりたいのですが、 IEブラウザを立ち上げてメッセージボックスをvbApplicationModalで表示させても ブラウザより裏側で表示されてしまいます。 If objIE.Document.Body.innerHTML Like "*こんにちは、*さん*" Then i = MsgBox("別のIDでログインしています!続けますか?", vbYesNo + vbApplicationModal) If i = 7 Then End End If objIE.Visible = True という順番にすればよいのですが、他のコードの関係もあってメッセージボックスより先にブラウザを表示させたいのです。 そんな事は可能でしょうか? ご回答よろしくお願いします。

  • 現在表示されているURLを取得したいのですが

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.goo.ne.jp/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Navigate Set objIE = Nothing End Sub //////////////////////////////////////////////// をやろうとすると、 Debug.Print objIE.Navigate の部分で、「引数は省略できません。」とエラーになります。 どう修正すればいいか教えてください。 ("http://www.goo.ne.jp/"はダミーです)

  • NewはCreateObjectと同じ意味?

    Sub test01() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True End Sub Sub test02() Dim objIE As New InternetExplorer objIE.Visible = True End Sub この二つのコードを比較した場合、 Dim objIE As New InternetExplorer で宣言すれば、 Set objIE = CreateObject("InternetExplorer.application") がなくても、 objIE.Visible = True をしてみるとブラウザが立ち上がっているのですが、 これは NewはCreateObjectと同じ意味という事でしょうか?

  • IEではなくファイアフォックスを指定することは

    VBAでブラウザを開く場合、 IEではなくファイアフォックスを指定することは可能ですか? 既定のブラウザはIEにしています。 Sub test1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.ocn.ne.jp/" objIE.Visible = True Set objIE = Nothing End Sub の Set objIE = CreateObject("InternetExplorer.Application") の部分を Set objIE = CreateObject("firefox.exe") に変えてみたら、 【ActiveX コンポーネントはオブジェクトを作成できません。(Error 429)】 になりました。

  • これは何がおかしいですか?

    こんばんは。 会社のWEBアプリを開くコードなのですがエラーになります。 Dim objIE As Object Sub webアプリ() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://○○.aspx" Call IE_wait End Sub Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub こうすると、 Do Until objIE.ReadyState = READYSTATE_COMPLETE の部分で、 --------------------------- 実行時エラー-2147417848 もしくは 実行時エラー-2147023179 オートメーションエラーです。 そのインターフェイスは認識されません。 --------------------------- になります。 最初に実行時エラー-2147417848になり、デバッグボタンを押すと 実行時エラー-2147023179に変化します。 Dim objIE As Object を Dim objIE As InternetExplorer にしてもエラーが発生します。 しかし、 objIE.Navigate "https://○○.aspx" を objIE.Navigate http://www.goo.ne.jp/ にすると、エラーは発生しません。 https://○○.aspxは存在するアドレスです。 問題なく表示はされています。 表示するまで待たせて次のコードを書きたいので、表示するまで待つ処理をしたいです。 ご教授よろしくお願いします。

  • vbaでIEの操作

    こんばんは。やりたいことができないので教えてください。 vbaで指定のurlを開きたいです。 エクセル2003とIE8です。 Sub test001() Dim ObjIE As Object Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True ObjIE.navigate "http://jp.msn.com/" Do While ObjIE.Busy = True '表示させるまで待つ DoEvents Loop End Sub これでIEを立ち上げてURLを開けるのですが これでは新しいウインドウで開いてしまいます。 現在IEを立ち上げていて、上記のコードを実行すると 新たなタブで開きたいですが解決策はありますか? ObjIE.Visible = True が原因かと思い、これを抜かしてみましたが そうすると何も起こりません。 VBAで既に開いているIEの新しいタブでURLを開く方法をご教授ください!よろしくお願いします。

  • ExcelVBAについて質問です。

    ExcelVBAについて質問です。 Webのデータを取得したいのですがたまにエラーがでます。 そこで1回エラーが出たら再度同じ処理をして、2回目もエラーが出たら エラーメッセージを表示させたいです。 しかし1回目エラーで2回目取得できたらうまくいくのですが 2回連続でエラーになったら途中で止まってしまいます。 2回連続でエラーになった時の処理方法を教えてください。 Public Sub クリック_Click()  On Error GoTo Err1  Dim エラー As Integer For エラー = 0 To 1  'HTML読み込み   Dim fff As String 'ファイルパス   Dim objIE As Object 'オブジェクト   Dim Myhtml As Variant 'HTMLタグデータ  '制御htmlファイル   phn = ThisWorkbook.Path   fff = "URL"  'Webページ表示   Set objIE = CreateObject("InternetExplorer.Application")   objIE.Navigate fff  '画面表示待ち   Do While objIE.Busy = True    DoEvents   Loop  Myhtml = objIE.Document.Body.innerHTML  objIE.Quit  Sheets("シート").Range("A1").Value = Myhtml Exit Sub Err1:  Next エラー  MsgBox "エラー発生" End Sub

  • VBAでIE操作をするサンプル

    VBAでIE操作をするサンプルをネットでいくつか見ているのですが Sub Sample1() Dim objShell As Object Dim objIE As New InternetExplorer Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing Set objShell = Nothing End Sub Sub Sample2() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub ではどちらを使った方がいいのでしょうか? 圧倒的にSample2の方がネットでは多いのですが Sample1のやり方もあることを知りました。 Sample1の方法でブラウザを開くメリットはあるのでしょうか?