Accessのインポートエラーテーブルが邪魔、自動削除したい…っていうかそもそも作成されないようにしたい


バージョン

Windows10 Pro バージョン20H2 OSビルド19042.630
Access for Microsoft 365 MSO(16.0.13328.20334)32ビット

インポートエラーテーブルってなんぞ?

こんなようなやつ。

中身はこんな感じ。

なんでこんなものができるの?

例えばcsvをテーブルにインポートする為に、下記のようなコードを書いたとします。

DoCmd.SetWarnings False

DoCmd.TransferText _
    acImportDelim, _
    "インポート定義名", _
    "テーブル名", _
    "csvファイルパス", _
    True

DoCmd.SetWarnings True

んでんでんで、csvファイルに項目ずれなどがあって、正常にインポートできなかった時に、インポートエラーテーブルが作られちゃいます。
数値型カラムに文字列を入れようとする状態になってたりとか。

インポートエラーテーブルは自動で削除されません。
何かしら対処しないと残り続けます。

インポートエラーテーブルは必要ないから全消しするぞ関数

Accessのローカルテーブル内から名前に『_インポート エラー』を含むテーブルを全て削除する関数がこちら。

Public Function drop_import_error_table()

    Dim tbl_ As DAO.TableDef
    For Each tbl_ In CurrentDb.TableDefs
        If tbl_.Name Like "*_インポート エラー*" Then
            DoCmd.DeleteObject acTable, tbl_.Name
        End If
    Next

End Function

同名ファイルをインポートすると下記のようになるので、『_インポート エラー』を 含む を削除条件にしています。

いやらしいファイル

ファイル名 + _インポート エラー でテーブルが作られるから、 ファイル名が長いと …ごらんのありさまだよ。

赤枠のやつは前項の関数では削除されないよ…。
仕方ないから 『インポート』 とか 『インポ』 で検索かけて手で消すしかないよ…(´・ω・`)
もしそんな場面を見られでもしたら…。

(うわ!何この人…仕事中に『インポ』で検索かけてる…変態だわ……近づかないようにしよ……)

…となるわけです(´・ω・`)

外部ファイルを取り込む時は、対象ファイルを作業フォルダーにリネーム移動した上で取り込んだ方がいいかもね。
規則性のあるファイル名にして取り込めば、テーブル名の桁あふれの心配無くなるぞい。
インポートエラーテーブルのデータを使って何かしたい時も、プログラム作りやすくなるしね。

そもそも作らせない設定は?

いろいろ探したのですが、インポートエラーテーブルを作らないようにする設定は見つかりませんでした。

蛇足

通常使うテーブルは名前に『_インポート エラー』を含まないように設計した方がいいかな…。(多分そんなことはしないとは思うけど)

こういうことあるよ(´・ω・`)
1. 運用の途中でAccessに取り込むcsvの仕様が変わる。
2. 処理には無関係のカラムの値が変わっただけなので、クリティカルな処理には影響なし。(でもインポートエラーにはなる)
3. いつのまにかインポートエラーテーブルが大量にAccess内に出来上がっていた…。

例えば10万行くらいのcsv取り込む処理でインポートエラーになると、場合によっては20万~30万レコードのインポートエラーテーブルできちゃったりするよ(´・ω・`)
…んで、消さなければそのテーブルがずっと残り続けるわけです…。