民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS VBScriptとExcelとADOで未知のエラーが発生しました

<<   作成日時 : 2008/05/20 23:08   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

先日来、どうもMySQLの文字化けが発生してくれない。なので、とりあえず文字化け問題は解消したものと仮定して、次のステップに進むことにした。今回のミッションは、MySQLから取り出した数値データを、既定のExcelのフォームの決まった位置にコピーしていき、人間にとって、見た目の美しいワークシートを作成するというもの。
当然、Accessで作ったデータをExcel形式でエクスポートしましたといった程度で済まされるようなシンプルなレイアウトではない。ちなみに前任者は、Accessで何度も何度もクエリーを走らせながら、その結果をExcelのワークシートに手でコピー&ペーストしていた。
これをもう少し華麗に作業できるようにしようということで、私が選んだのはVBScriptによる自動化。しかしそこでまたお約束の落とし穴が待っていた。

問題のコードの概略は次のようなもの
(objConnはADOのConnectionオブジェクト、objRsはADOのRecordsetオブジェクト、objWksはExcelのワークシートである)
objRS.Open "SELECT COUNT(a) FROM tbl WHERE a=x;", objConn
objRs.MoveFirst
wks.Cells(5, 6).Value = objRs.Fields(0)
objRs.Close

要は、DBMS上でカウントしたレコード数をExcelのワークシートに書き込んでいるだけだ。
それがいざ実行してみると、「wks.Cells(5, 6).Value = objRs.Fields(0)」の部分で「未知のエラーが発生しました」となってスクリプトが停止してしまう。
やっかいなことに、似たコードでも通る場合があるのだ。しかしひっかかる箇所はいつも同じで再現性もある。
コードを細工しながら原因を絞り込んでいったところ、どうもobjRs.Fields(0)のデータ型に問題があるらしいと分かってきたので、とりあえず
wks.Cells(5, 6).Value = CLng(objRs.Fileds(0))
と書き直すことでエラーを回避できるようにはなった。
意図した結果が得られるようにはなったのだが、どうも釈然としない解決策となった。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
VBScriptとExcelとADOで未知のエラーが発生しました 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる