- ベストアンサー
VBAのresponseTextのエラー
- VBAのresponseTextでエラーが発生し、プログラムの修正方法がわかりません。
- エクセルのマクロでMSXML2を使用して特定のサイトのテーブル内の情報を取得したいが、エラーが発生しています。
- 質問者は以前に同様の質問をしており、回答では文字コードの変換が行われていましたが、別の方法についても検討したいと思っています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 さしあたり、当該サイトの利用規約については、 そちらでご確認の上、ご検討くださいね。 こちらも納期が迫ってあまり時間取れなくて 本件にもなかなか着手する余裕がなく返答が遅れましたが、 こちらで出来ることとしては、 <table class="sr-tbl"> を objTable に格納するところまで、の対策を提示することだけです。 その後の出力の記述がうまくいっていないことにも 気がついてはいますが、ご要望がわかりませんので、 そちらで工夫して仕上げてあげて下さい。 因みに If ... Then ... ElseIf ... Then ... End iif このステートメントが実際に必要かどうかはわかりませんが、 Select Case ... Case 2 ... Case n ... End Select のようにそれぞれ分けて書いたり、 分岐はするけど、処理内容が共通するものが多いならば、 Select Case Case 2, 3, 4, 7, 8 出力処理 Case 10 インクリメント処理 End Select みたいに書くのが良さそうな気はします。 本題、対策の一例としては、以下の4点です。 1)参照設定 ================= before>' ' ■ MSXML2 Microsoft XML, v3.0 -------------------- after> ' ' ■ WinHTTP Microsoft WinHTTP Services, version 5.1 に換える。 ============================== 2)HttpRequestの変数宣言===== before> Dim objXML As New MSXML2.XMLHTTP -------------------- after> Dim objXML As New WinHttp.WinHttpRequest ============================== 3)変数宣言の追加============= Dim b ' shift-jisバイナリを格納 → unicodeテキストに変換 ============================== 4)読込方法の変更==================== before> .send (Null) htmlDoc.write .responseText -------------------- after> .send (Null) b = .responseBody ' shift-jisバイナリを格納 b = StrConv(b, vbUnicode) ' unicodeテキストに変換 htmlDoc.write b ============================== ちなみに、 ここで初めて私が回答差し上げたQ9320368でも、 "WinHTTP"を使っていますが、 その時のリンク先になっているQ9123746でも、 質問者さんは"XMLHTTP"でというご要望なのに、 私が"WinHTTP"に替えている理由のひとつは、 今回のような事例が他にもある、という含みがあってのことです。 以上、ご参考まで。
お礼
ご回答ありがとうございます。 いただいたご回答による修正でエラーが消えてプログラムが動作するようになりました! "WinHTTP"でないと取得できないサイトもあるんですね。 アドバイスをいただけなければずっと"XMLHTTP"で試しており、仮に"WinHTTP"で試していたとしても"responseText"で試していた可能性が高いので悩む時間が短縮でき非常に助かりました。 Select Caseの処理もそのような処理コマンドがあることすら知らなかったので、今後検討してみます。 わざわざ時間を割いていただき、本当にありがとうございました。