どうしたら問題なく取得できるでしょうか。
◆エラーの表示
実行時エラー'-1072896658(c00ce56e)':
システムエラー:-1072896658
◆ソース
url="http://www.e-hon.ne.jp/bec/SA/Detail?refShinCode=0100000000000033099016&Action_id=121&Sza_id=C0"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.Send
html = http.responseText
これ、別の形ですけど、はまったことあります。
ぼくの他にも、はまった人を見つけた。
http://d.hatena.ne.jp/kusakari/20070720/1184928455
e-hon のサイトの応答を見ると、
Content-Type: text/html; charset=Windows-31J
になってますし、応答の !DOCTYPE の前に、延々と空白行が出力されていることから、Webサーバは unix系で、jsp を使ってるっぽいことが想像できます。
ただ、上記のは Webサーバサイドの対応の仕方で、今回のケースでは使えません(ぼくがはまったときは、サーバサイドで解決しました)。
文字コードの扱いでエラーになってて、実は、通信は成功しています。
変数のウォッチで、変数 http を見てみると、responseText はダメですけど、responseBody プロパティが利用できそうなのが分かると思います。
質問のコードで、responseText を使うところを書き換えてみました。
URL = "http://www.e-hon.ne.jp/bec/SA/Detail?refShinCode=0100000000000033099016&Action_id=121&Sza_id=C0" Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", URL, False http.Send ' ★ .responseText を使おうとすると、変換エラーが出る 'HTML = http.responseText ' ★ 通信には成功してて、.responseBody (バイナリ) は利用できたりする HTML = StrConv(http.responseBody, vbUnicode) ' ★ 例えば、ページのタイトルを切り出してみる i1 = InStr(1, HTML, "<title>") i2 = InStr(1, HTML, "</title>") Range("A1").Value = Mid(HTML, i1 + 7, i2 - i1 - 7)
コメント(0件)