人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBA(Excel)で以下の
data = .responseText
のステートメントで

「実行時エラー’-2147467259 (80004005)’
エラーを特定できません」
というVBのデバッグを促すダイアログが出ます。

responseTextの内容が、<システムエラー:-1072896658>となっている
のが原因だと思いますが、なぜresponseTextの内容がシステムエラー
になるのでしょう?
当然ieで直接開けるCSVのURLをコピーペーストしています。

---
Dim data As String
Dim req As Object
Set req = CreateObject(”Microsoft.xmlhttp”)

With req
Call .Open(”GET”, ”http://your_server/sample.csv”, True)
Call .send(vbNull)
If .readyState <> 4 Or .Status <> 200 Then
’ エラー処理
End If
data = .responseText
End With

●質問者: P-mako
●カテゴリ:ウェブ制作
✍キーワード:as CSV Excel IE Microsoft
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● sohei
●15ポイント

まず、

参照設定で「Microsoft XML, v3.0」(msxml3.dll)を追加しましたか?


できれば、

Dim req As Object

ではなく、

Dim req As MSXML2.XMLHTTP

のように宣言した方が良いでしょう。


以上を修正したらエラーが消えました。

◎質問者からの返答

ご指摘のdllは追加していませんでしたので、追加しました。

reqの宣言もご指摘のとおり変更しましたが、上手く動作しません。

どうも、

If .readyState <> 4 Or .Status <> 200 Then

の判定で「エラーを特定できません」と出力されるようです。

ちなみにreq.readyState=4、req.Status=200ですし、req.Statusは、デバッグウィンドウ(ローカル)では、statusですが、コードをいくら修正しても大文字に修正されてしまいます。

というのは関係あるのでしょうか?(=VBって大文字小文字の認識するのでしょうか?)


2 ● sohei
●5ポイント

http://www.atmarkit.co.jp/fwcr/special/ajax01/01.html

@IT:古くて新しいAjaxの真実を見極める

肝心なところに気づいていませんでした。申し訳ありません。


Call .Open(”GET”, ”http://your_server/sample.csv”, True)

の、Trueの部分です。


Trueにすると非同期通信を行います。レスポンスが帰ってこなくても次の処理を行います。

そのため、Statusが取得できなかったと考えられます。

このTrueをFalseにすると同期通信を行いますので、レスポンスが帰ってくるまで待機することになるので、エラーはなくなるでしょう。

非同期通信を行いたいのであれば、エラー処理をしてやれば良いと思います。


(最近流行のAjaxの論理ですね。)

http://allabout.co.jp/career/javascript/closeup/CU20050615A/

Ajax Sync(同期)とAsync(非同期) - [JavaScript]All About

◎質問者からの返答

ご回答ありがとうございます。

その後、調べていて第3引数の意味がわかりました(ご指摘のとおりAsyncでした)。

ちなみに第4、5は認証が必要な場合のIDとPWDなんですね。(といいつつ、あるバージョンまでは不具合があるように記述してあるサイトもありました)

早速、試したところ、エラーが特定できないというメッセージは消えたものの、responseTextの内容が、<システムエラー:〜>である状態は変わりませんでした。


3 ● aki73ix
●50ポイント

http://yamashita.dyndns.org/blog/222

開発中システムにAjaxを採用してレスポンス向上 — Weboo! Returns.

同期通信の件がかいけつできてよかったです


次の問題ですが、これは、サーバー側のcharsetの問題だと思います


例えば、

1. http://nifberry.727.net/test/hatena157.cgi

2. http://nifberry.727.net/test/hatena157a.cgi

3. http://nifberry.727.net/test/hatena157b.cgi

この3つのアドレスをURLに指定して実行してみてください


1はエラー

2は文字化けが発生

3は正常受信できると思います


これは、Content-Textの中身がそれぞれ

1. Content-Type: text/plain; charset=Windows-31J

2. Content-Type: text/plain

3. Content-Type: text/plain; charset=shift-jis


を返すようになっています(どれもIEでは見ることが出来ると思います)


1の場合は、MSXMLの知らないキャラセットが設定されたために判別できずにエラーとなります

2の場合は正常にデコードできませんが、場合によっては受信できるようです

3の場合はようやく正常に受信できるというわけです

サーバー側でキャラセットを返すように設定しないとダメ・・・という訳ですね

◎質問者からの返答

aki73ixさん、cgi設置ありがとうございます。

おっしゃるとおり、3で解決しました。

ホントにありがとうございます。

要はApache(Webサーバ)の設定ということですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ