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

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

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

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

解決できること

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

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

読んでほしい方

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

CleanUpImportErrorTable 関数 の紹介

説明

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

参照オブジェクト

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

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

の中で

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

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

利用例

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


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


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


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

しらかば堂

入力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というユーザー定義関数について紹介しました。

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