スキップしてメイン コンテンツに移動

投稿

8月, 2014の投稿を表示しています

Access adpのVBAでTransferTextを使いCSVファイルをインポートするとエラーになる場合がある。

タイトルのように、Access adpファイルでVBAに   DoCmd.TransferText acImportDelim    を使いCSVファイルをインポートしようとするとエラーになる場合がある。   実は、Access2003くらいからずっとこの問題に悩まされていて、インポート中に以下のようなメッセージが出てエラーになることがある。       「バリアント型でない変数にNull値を代入しようとしました」       読み込むCSVのファイルは、毎週1回更新用に提供されるもので、週によって上記のエラーが出たり出なかったりする。   よくわからないのは、エラーとなっても、手動でインポートをやるとエラーにならず上手くインポートできてしまうということ。   読み込むテーブルの各列の NULLを許容 の属性にチェックを入れてもエラーになる時はなる。   何行目のデータでエラーが起きているのかの情報もないのでどのデータが悪いのかもよくわからない。   そんなわけで、エラーが出た時は、手動でインポートして対応していました。       ここで、インポート定義を使えばいいのではと思われる方もいるとは思いますが、apd では仕様上インポート定義が使えないようです。       それで、ここからは私の推測なんですが、apd の環境で、DoCmd.TransferText acImportDelim 実行する場合は、コマンド実行に先立って、インポートするCSVのファイルをダミーで読んで各列のデータ型を決めているのでは・・・・。それで実際に読んだ時にダミーの読んだ時の型と不一致なデータが出現した場合にエラーとなるのではないか・・・・。   という推測です。間違っていたらご指摘ください。       では、どう解決すればいいのかと、いろいろ調べてみると、やはり、地道にVBAの標準のI/Oを使って読み込むのが確実なようです。   以下に、サンプルコードを抜粋しておきますので...