目次
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 を呼び出すと
以下のように該当テーブルを削除できます。
引数
なし
戻り値
値 | 意味 |
---|---|
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というユーザー定義関数について紹介しました。
この情報が読者のお役に立てば幸いです。
入力CSVファイルにデータの入力ゆらぎにより当初想定の型以外のデータが入力されるのは普通に想定されることなので
この CleanUpImportErrorTable は ImportCsvFile の後処理としてセットで利用すると便利です。