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

先日来、どうも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

この記事へのコメント

この記事へのトラックバック