-2147467259 エラーを特定できません。

このQ&Aのポイント
  • VBAでエラーが発生し、エラーコード-2147467259(80004005)が表示されます。
  • エラーが特定できないため、原因を特定するのが困難です。
  • エラーが発生する原因として、ウェブページが存在しない可能性が考えられます。
回答を見る
  • ベストアンサー

-2147467259 エラーを特定できません。

VBAで3つのパターンを作ったのですが ------------------------- Sub test1_wiki() Dim objMSXML2 As Object Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8", False objMSXML2.Send End Sub ------------------------- Sub test2_100円ローソン() Dim objMSXML2 As Object Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "http://ja.wikipedia.org/wiki/%EF%BC%91%EF%BC%90%EF%BC%90%E5%86%86%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3", False objMSXML2.Send End Sub ------------------------- Sub test3_ローソン() Dim objMSXML2 As Object Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3", False objMSXML2.Send End Sub ------------------------- 2のtest2_100円ローソンだけが objMSXML2.Sendで 実行時エラー -2147467259(80004005)エラーを特定できません。 となります。 wikiのページが存在しないからでしょうか? であれば、そのソースが取得できても良いと思うのですが なぜVBAでエラーになるのでしょうか?

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

  • ベストアンサー
回答No.2

おまけです。 『100円ローソン - Wikipedia』 についても、正しいURLを指定してやれば、  .responseText を取得できること  .responseText を基にタイトルやページ名の取得ができること  .Status に 404  .StatusText に "Not Found" がそれぞれ返ること を、最下のマクロを実行して確認してみてください。 結果は、イミディエイトウィンドウ(Ctrl+G)に、以下のように表示されます。 | [title] Wikipedia [page] メインページ | [urlSent] https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 | [htmlTextLength] 87213 | [.Status] 200 [.StatusText] "OK" | | [title] ローソン - Wikipedia [page] ローソン | [urlSent] https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3 | [htmlTextLength] 319176 | [.Status] 200 [.StatusText] "OK" | | [title] 100円ローソン - Wikipedia [page] 100円ローソン | [urlSent] https://ja.wikipedia.org/wiki/%EF%BC%91%EF%BC%90%EF%BC%90%E5%86%86%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3 | [htmlTextLength] 17388 | [.Status] 404 [.StatusText] "Not Found" | | | 実行時エラー '-2147024891': | | | アクセスが拒否されました。 |  → urlを確認!! | [urlSent] http://ja.wikipedia.org/wiki/%EF%BC%91%EF%BC%90%EF%BC%90%E5%86%86%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3 | [htmlTextLength] 0 | [.Status] 0 [.StatusText] "Unknown" | ' ' /// Sub ReW9085617() Dim objMSXML2 As Object, oDoc As Object Dim arrURL(), sHTML As String, i As Long   arrURL() = Array( _     "https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8", _     "https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3", _     "https://ja.wikipedia.org/wiki/%EF%BC%91%EF%BC%90%EF%BC%90%E5%86%86%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3", _     "http://ja.wikipedia.org/wiki/%EF%BC%91%EF%BC%90%EF%BC%90%E5%86%86%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3")   Set objMSXML2 = CreateObject("MSXML2.XMLHTTP")   For i = 0 To UBound(arrURL)     objMSXML2.Open "GET", arrURL(i), False     On Error Resume Next     objMSXML2.Send     Select Case Err: Case -2147024891, -2147467259       Debug.Print "| 実行時エラー '"; CStr(Err); "': |"       Debug.Print "| "; Split(Err.Description, vbCrLf)(0); " |  → urlを確認!!"     End Select     On Error GoTo 0     sHTML = objMSXML2.responseText     If Len(sHTML) Then       Set oDoc = CreateObject("HTMLFILE")       oDoc.Write sHTML       Debug.Print "[title] "; oDoc.Title, "[page] "; oDoc.GetElementByID("firstHeading").innertext       Set oDoc = Nothing     End If     Debug.Print "[urlSent] "; arrURL(i); vbLf; "[htmlTextLength]"; Len(sHTML)     Debug.Print "[.Status]"; objMSXML2.Status, "[.StatusText] """; objMSXML2.statusText; """"; vbLf     objMSXML2.abort   Next i   Set objMSXML2 = Nothing End Sub ' ' ///

byjqlolck
質問者

お礼

ありがとうございます。

その他の回答 (1)

回答No.1

こんにちは。 Webブラウザなどで、 http://ja.wikipedia.org/wiki/%EF%BC%91%EF%BC%90%EF%BC%90%E5%86%86%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3 を、 小窓に入力してページを開こうとしたり、張られたリンク先を開こうとすると、 自動的に、 https://ja.wikipedia.org/wiki/%EF%BC%91%EF%BC%90%EF%BC%90%E5%86%86%E3%83%AD%E3%83%BC%E3%82%BD%E3%83%B3 正しいページへと、遷移してくれるけれど、 そういう機能は、MSXML2.XMLHTTP には用意されていないのか? というお訊ねでしたら、私の知る限りでは、用意されていません。 普通に"https"でURLを指定すれば、正しく機能することを確認しました。 > wikiのページが存在しないからでしょうか? 概ね、その通りですが、よくある'エラー 404'ではありません。 > であれば、そのソースが取得できても良いと思うのですが > なぜVBAでエラーになるのでしょうか? こちらで最初にテストした時のエラーは、以下。 '------------------------- '|実行時エラー '-2147024891 (80070005)': '|アクセス拒否されました。 '------------------------- 構わず繰り返し実行し続けていると '------------------------- '|実行時エラー '-2147467259 (80004005)': '|エラーを特定できません '------------------------- といった具合でした。(環境によって違いが見られる部分でしょうけれど) アクセス拒否されている、ということなら、 ソースも取得できないことも納得がいくのではないでしょうか。

byjqlolck
質問者

お礼

ありがとうございます。

関連するQ&A

  • myObjにタグを格納してループはできない?

    MSXML2.XMLHTTPの時は、 myObjにタグを格納してループはできないのでしょうか? Sub test() Dim objIE As Object Dim myObj As Object Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://○○.html", False objIE.send For Each myObj In objIE.Document.all.tags("p") Next Set objIE = Nothing End Sub 上記だと実行時エラー438になります。 Set objIE =CreateObject("InternetExplorer.Application") でループしないとダメでしょうか? Set objIE =CreateObject("InternetExplorer.Application") は時間がかかるので、できれば Set objIE =CreateObject("MSXML2.XMLHTTP") でやりたかったのですが、タグを格納できないのでしょうか?

  • VBA システムエラー

    始めまして VBA初心者です Excel2003のVBAで「toto」のサイトからデータを取得する プログラムを作成しようと思っています。 しかし「xmlHttp.responseText」の部分で 「実行時エラー '-1072896658(c00ce56e)':」 「システムエラー:-1072896658」 のエラーが出てしまいます。 解決方法をご教授いただけないでしょうか? '**************ソース********************************** Dim xmlHttp As MSXML2.xmlHttp Dim html As String Set xmlHttp = CreateObject("MSXML2.XMLHTTP") Call xmlHttp.Open("GET", "http://www.toto-dream.com/dc/SK0160.do", False) Call xmlHttp.send(vbNull) html = xmlHttp.responseText Set xmlHttp = Nothing '**************ソース**********************************

  • VBA InStrがうまくできない

    ソースを見ると <div class="hd"> と言うタグは有るのに VBAで Sub test() Dim objIE As Object Dim myObj As Object Dim str電話番号 As String Dim strHTML As Variant Dim intstart As Variant str電話番号 = "03-58**-58**" Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://search.loco.yahoo.co.jp/search?p=" & str電話番号, False objIE.send strHTML = objIE.responseText intstart = InStr(1, strHTML, "<div class=""hd"">") End Sub とした時にintstartは0が返ります。 なぜソース上は<div class="hd">は存在するのに 0が返るのでしょうか?

  • VBAでxmlから特定の文字を変数に入れたい

    VBAからXMLを取得したくて方法を検索し、以下のコードで何とか取得ができました。 Sub httpRequest() Dim HttpReq As MSXML2.XMLHTTP Dim DomDoc As MSXML2.DOMDocument Dim targetURL As String targetURI = "http://www.drk7.jp/weather/xml/14.xml" 'HTTP GET Set HttpReq = CreateObject("MSXML2.XMLHTTP") HttpReq.Open "GET", targetURI, False HttpReq.send (Null) 'XML PARSE Set DomDoc = CreateObject("MSXML2.DOMDocument") DomDoc.LoadXML (HttpReq.responseText) dumpDomDoc DomDoc.ChildNodes Set HttpReq = Nothing Set DomDoc = Nothing End Sub Sub dumpDomDoc(objNode) Dim obj For Each obj In objNode MsgBox obj.ParentNode.nodeName & " : " & obj.NodeValue If obj.HasChildNodes Then dumpDomDoc obj.ChildNodes End If Next End Sub このコードですと、読み込んだXMLを一行づつメッセージボックスに延々と表示するだけなのですが、 例えば行先のXMLファイルにある<description>と</description>に囲まれた部分だけを変数に格納するにはどのように記述すればよろしいのでしょうか? ググってはみましたが知識不足の為、解説も理解できず困っております。 大変お手数ですがご教示いただけますようお願いします。

  • InternetExplorer.Applicat

    Sub test1() Dim objIE As Object Dim i As Long Dim MyRow As Long Dim Str As String Dim tmp As Variant Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://oshiete.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Str = objIE.Document.Body.innerHTML 'ソースを抜き出す tmp = Split(Str, Chr(10)) '配列に格納する MyRow = 1 '初期値 For i = LBound(tmp) To UBound(tmp) Cells(MyRow, 1) = tmp(i) MyRow = MyRow + 1 Next i objIE.Quit Set objIE = Nothing End Sub ************************************************** Sub test2() Dim objIE As Object Dim Str As String Dim tmp As Variant Dim i As Long Dim MyRow As Long Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://oshiete.goo.ne.jp/", False objIE.Send Str = objIE.responseText 'ソースを抜き出す tmp = Split(Str, Chr(10)) '配列に格納する MyRow = 1 '初期値 For i = LBound(tmp) To UBound(tmp) Cells(MyRow, 1) = tmp(i) MyRow = MyRow + 1 Next i Set objIE = Nothing End Sub ************************************************** 上記の二つのコードは どちらもVBAでHTMLソースをエクセルに書き出すコードなのですが 結果が違います。 なぜなのでしょうか? 実際のソースを確認したら CreateObject("MSXML2.XMLHTTP") の方が正しかったです。 CreateObject("InternetExplorer.Application") は何が取得されてるのでしょうか?

  • 参照設定に「MSXML2.XMLHTTP」

    VBAでMSXML2.XMLHTTPを使ってIE操作をしたいのですが、 参照設定に「MSXML2.XMLHTTP」が見つかりません。 Dim objIE As Object でも宣言できますが、 本物のオブジェクトで宣言したいです。 何かをダウンロードしなくてはいけないのでしょうか?

  • MSXML2で、サイトのタイトルを取得したい

    アクセスvbaです。 InternetExplorerの方法だと、 **************************************************** Sub Sample1() Dim ObjIE As InternetExplorer Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://www.yahoo.co.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Debug.Print ObjIE.Document.Title Debug.Print ObjIE.LocationName ' 同じ ObjIE.Quit Set ObjIE = Nothing End Sub **************************************************** で、該当のサイトのタイトルを取得できるのですが、 これではなく、 **************************************************** Sub Sample2() Dim objMSXML2 As Object Dim myObj As Object Dim myAll As Variant Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "http://www.yahoo.co.jp/", False objMSXML2.Send myAll = objMSXML2.responseText 'ソースを抜き出す ’タイトル取得 Set objMSXML2 = Nothing End Sub **************************************************** の方法で、サイトのタイトルを取得したいのですが、 可能でしょうか? コードをご教授ください。よろしくお願いします。

  • VBA web情報取得(スクレイピング)について

    初心者ですが宜しくお願いいたします。 環境:EXCEL 2007 簡単な情報を取得してシートに入れていきたいと思っています。 参考サイトを拝見し以下のコードを見つけました。 Sub test() Dim oHttp As Object Set oHttp = CreateObject("MSXML2.XMLHTTP") oHttp.Open "GET", "取得サイトのURL", False oHttp.Send Debug.Print oHttp.responseText End Sub 試しに天気予報から今日の天気を取得しようと思い、 http://weather.yahoo.co.jp/weather/jp/27/6200.html のサイトからHTMLを取得し、 イミディエイトウィンドウで "今日の天気" の語句を検索しましたが、見つかりませんでした。 他のサイトでも試してみましたが、必要な情報がHTMLに含まれていないようです。 切り出したい文字列が見つからないのは、取得方法に何か問題があるのでしょうか? 素人質問で本当に申し訳なく思います。 何か参考になるサイトや参考書等でもかまいませんので、 お知恵を貸していただけると助かります。 宜しくお願いいたします。

  • AccessVBAで、ホームページの内容を取得すると文字化けする

    とあるサイトで下記のようなVBAソースを拾って、 実行してみたところ、日本語部分が文字化けしてしまいました。 --- ここから Dim Http Dim Buf As String 'GET Set Http = CreateObject("MSXML2.XMLHTTP") Http.Open "GET", "http://www.yahoo.co.jp", False Http.send Buf = StrConv(Http.ResponseBody, vbUnicode) --- ここまで これでBufにサイトのHTMLが格納されますが、 日本語部分が文字化けしてしまいます。 どうにかして回避できないものでしょうか。

  • 文字化けについて

    アクセスのテーブルをTransferTextでエクスポートし、 そのソースの中身のタグをVBAで置換したいのですが Sub test1() Dim objIE As Object Dim myStr As String Dim t As String t = "Table" DoCmd.TransferText acExportHTML, , t, MyDesktop & "\" & t & ".html", True Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", MyDesktop & "\" & t & ".html", False objIE.send myStr = objIE.responseText myStr = Replace(myStr, "<TD DIR=LTR ALIGN=RIGHT>", "<TD>") Debug.Print myStr Set objIE = Nothing End Sub これだと、日本語部分が?になってしまいます。 なので、 myStr = objIE.responseText を myStr = StrConv(objIE.responseText, 64) に変更したら、余分なスペースが入り、結局文字化けしたままです。 http://www2s.biglobe.ne.jp/iryo/vba/IE/http1.html を参考にしたのですが、日本語を含むソースの場合はどうすればいいでしょうか?

専門家に質問してみよう