【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する

【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する

CSV ファイルインポート時のエラーテーブルを削除する

この記事では「CSV ファイルインポート時のエラーテーブルを削除する」ために利用可能な CleanUpImportErrorTable というユーザー定義関数について紹介します。

この情報が読者のお役に立てば幸いです。

解決できること

Microsoft Access の中でここで紹介する CleanUpImportErrorTableをマクロの中で呼び出すと

【Access VBA】指定 CSV ファイルを指定テーブルにインポートする

で紹介されている ImportCsvFile 関数の実行後等に入力CSVのデータのゆらぎ等により生成される、テーブル名にインポート エラーという文字列を含む以下のようなテーブルを簡単に削除できます。

【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する

読んでほしい方

こうした Microsoft Access VBA を使ったアプリケーションをこれから作ろうと思っている方、今まで VBA によるアプリケーションを作ってきたが、そのツールを第三者に提供する際に、フォルダの保存パス名等の利用者個人に紐づいた環境差分をVBAのプログラムの中にじかに書くのに抵抗がある方。

CleanUpImportErrorTable 関数 の紹介

説明

テーブル名に “インポート エラー” という文字列を含むテーブルを削除します。

参照オブジェクト

この関数を利用するためにはこの関数の実行前に

データベースツール > Visual Basic > ツール > 参照設定

【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する

の中で

  • Microsoft Office 16.0 Access Database engine
  • Microsoft ActiveX Data Objects 6.1 Library

にチェックを入れる必要があります。

利用例

例えば 以下のような M0010_Call_importCsvFile の中で ImportCsvFile によるCSVファイルのインポート操作をした後に

【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する


テーブル名に “インポート エラー” という文字列を含む以下のようなテーブルができたとき

【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する


例えば以下のようなM0020_Call_CleanUpImportErrorTable アクションマクロの中でパラメータを付けずに CleanUpImportErrorTable を呼び出すと

【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する


以下のように該当テーブルを削除できます。

【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する
【Access VBA】CSV ファイルインポート時のエラーテーブルを削除する
しらかば堂

入力CSVファイルにデータの入力ゆらぎにより当初想定の型以外のデータが入力されるのは普通に想定されることなので

この CleanUpImportErrorTable ImportCsvFile の後処理としてセットで利用すると便利です。

引数

なし

戻り値

意味
0 正常終了
1 異常終了

VBAコード

Function CleanUpImportErrorTable() As Integer

  Const C_SUCCESS As Integer = 0
  Const C_FAILURE As Integer = 1

  Dim currentDataBase  As Database
  Dim tableDefinition As Variant

  Dim lengthPrefixString As Integer

  On Error GoTo exitWithFailure

  Set currentDataBase = CurrentDb

  For Each tableDefinition In currentDataBase.TableDefs
      If (InStr(tableDefinition.Name, "インポート エラー") > 0) Then
        DoCmd.DeleteObject acTable, tableDefinition.Name
      End If
  Next

  Set currentDataBase = Nothing

  CleanUpImportErrorTable = C_SUCCESS
Exit Function

exitWithFailure:

  CleanUpImportErrorTable = C_FAILURE
End Function

 

VBAコードの簡単な説明

行番号 説明
1 関数名と関数の戻り値の型(Integer:整数型)を定義しています。
3-4 このプログラムの中で利用する定数C_SUCCESS(0:成功)、C_FAILURE(1:失敗)を定義しています。ここでは23行目、28行目ででこの関数の戻り値が C_SUCCESS(0:成功)、C_FAILURE(1:失敗)であることが明確にわかるようなコーディングの仕方になります。
6-9 currentDataBaseという変数をDatabase型で、またtableDefinition変数をVariant型で、そして lengthPrefixStringという整数型の変数を宣言します。
11 この関数の実行中にエラーが発生したときの例外処理として、exitWithFailure にジャンプします。
13

currentDataBase変数には、CurrentDb関数を使用して現在のデータベースをセットします。

15-19

currentDataBase変数のTableDefsプロパティには、データベース内のすべてのテーブル定義が含まれており、For Eachループを使用して、currentDataBaseの各テーブル定義に対して以下の処理を行います。

もしtableDefinitionのNameプロパティに「インポート エラー」という文字列が含まれている場合、acTableという定数を使用してDoCmd.DeleteObjectメソッドを呼び出し、そのテーブルを削除します。

21

ループが終了した後、currentDataBase変数を解放するためにNothingに設定します。

 23-24 この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。
28-29 この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。

まとめ

この記事では「CSV ファイルインポート時のエラーテーブルを削除する」ために利用可能な CleanUpImportErrorTableというユーザー定義関数について紹介しました。

この情報が読者のお役に立てば幸いです。

ライブラリ一覧