ExcelのVBAで、「e-hon」というサイトのhtmlを取得しようとするとエラーが出ます。


どうしたら問題なく取得できるでしょうか。


◆エラーの表示
実行時エラー'-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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/07/03 01:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント200pt

これ、別の形ですけど、はまったことあります。
ぼくの他にも、はまった人を見つけた。
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)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません