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