【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する

【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する

指定フォルダ配下のファイル名を保存するテーブルを自動生成する

この記事では「指定フォルダ配下のファイル名を保存するためのテーブルを自動生成する」ために利用可能な MakeBookNameTable というユーザー定義関数について紹介します。 この情報が読者のお役に立てば幸いです。

解決できること

Microsoft Access の中で通常テーブルを作成する方法としては通常
  1. 既存のテーブルに対し何かしらの 参照クエリ操作 を行い最終的に クエリの種類(U) > テーブル作成(K) で新たなテーブルを作成する
  2. クエリデザインビューを SQLビュー にし、SQL言語による記述でテーブルを作成する
  3. Access 「作成」->「テーブル」で現れる デザインビュー でテーブルを作成する
  4. 別の Access ファイルから同じテーブルをインポートする
といった方法がありますが、
  1. の方法は Access を起動直後の一番最初の状態では参照可能なテーブルがないので、この状態では参照クエリ操作の定義ができない
  2. の方法は別途SQL言語を覚える必要がある
  3. の方法はそれなりに手間がかかるので毎回これを行うのは精神衛生上好ましくない
  4. の方法は必要なテーブルがどの Access ファイルにあるのか探す必要がある
といった難点があります。一方ここで紹介する MakeBookNameTable をマクロの中で呼び出すと簡単に「指定フォルダ配下のファイル名を保存するためのテーブル」を自動生成できます。

読んでほしい方

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

MakeBookNameTable 関数 の紹介

説明

指定フォルダの フルパス名ファイル名ファイル作成日時 を格納するための以下のようなテーブルを作成します。 【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する

参照オブジェクト

この関数を利用するためにはこの関数の実行前に データベースツール > Visual Basic > ツール > 参照設定 【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する の中で
  • Microsoft Office 16.0 Access Database engine
にチェックを入れる必要があります。

利用例

Access のマクロ定義例えば “M0000_Call_MakeBookNameTable” の中で 【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する のように
If MakeBookNameTable("FileNamesList")>0 Then
  メッセージボックス ("FileNamesList" の作成に失敗しました。,はい,なし)
If 文の最後
のように MakeBookNameTableを “FileNamesList” のようなパラメータを付けて呼び出します。ここに “FileNamesList” は作成されるテーブルの名前です。 この “M0000_Call_MakeBookNameTable” のでデザインビューを閉じて、この ”M0000_Call_MakeBookNameTable” マクロをダブルクリックすると、このマクロが実行されこの中で  MakeBookNameTable が実行されると、 【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する のように左側のナビゲーションウインドウの一番上に、今まで存在しなかった  “FileNamesList”  というテーブルが作成されたことがわかります。この”FileNamesList” は 「開く(O)」 で見ると 【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する のようになっており、「デザインビュー(D)」で見ると 【Access VBA】指定フォルダ配下のファイル名を保存するテーブルを自動生成する のように表示され、”FileNamesList”  が期待どおりに自動生成されていることがわかります。

引数

属性 意味
テーブル名 文字型 作成するテーブルの名前を””で囲んだ文字列で関数のパラメータとして指定します。

戻り値

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

VBAコード

Function MakeBookNameTable(table_name As String) As Integer
    
    Const C_SUCCESS As Integer = 0
    Const C_FAILURE As Integer = 1
    
    ' 新しいADO接続を作成する
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    conn.Open CurrentProject.Connection
    
    Dim dataAccessObject As Object
    
    Dim tableDefinition As Variant
    
    On Error GoTo exitWithFailure
    
    Set dataAccessObject = CurrentDb
    
    ' table_nameが既に存在する場合は削除する
    For Each tableDefinition In dataAccessObject.TableDefs
        If (tableDefinition.Name = table_name) Then
            DoCmd.DeleteObject acTable, tableDefinition.Name
            Exit For
        End If
    Next
    
    ' 新しいtable_nameを作成する
    conn.Execute "CREATE TABLE " & table_name & " (PathName TEXT, BookName TEXT, BookDateTime DATETIME)"
    
    ' ADOオブジェクトをクリーンアップし、接続を閉じる
    conn.Close
    Set conn = Nothing
    dataAccessObject.Close
    Set dataAccessObject = Nothing
    
    ' ナビゲーションウィンドウを更新する
    Application.RefreshDatabaseWindow
    MakeBookNameTable = C_SUCCESS
    Exit Function
    
exitWithFailure:
    ' エラー時のクリーンアップ
    conn.Close
    Set conn = Nothing
    dataAccessObject.Close
    Set dataAccessObject = Nothing
    
    ' ナビゲーションウィンドウを更新する
    Application.RefreshDatabaseWindow
    MakeBookNameTable = C_FAILURE
End Function

VBAコードの簡単な説明

行番号 説明
1 関数名と関数の戻り値の型(Integer:整数型)、入力パラメータの名前、型(String:文字列型)を定義しています。
3-4 このプログラムの中で利用する定数C_SUCCESS(0:成功)、C_FAILURE(1:失敗)を定義しています。ここでは38行目でこの関数の戻り値が C_SUCCESS(0:成功)であるごとが明確にわかるようなコーディングの仕方になります。
6-11 この関数の中で利用される ADO(注1) を用いたオブジェクト  conn と dataAccessObject  の定義をしています。
15 この関数の実行中にエラーが発生したときの例外処理として、exitWithFailure にジャンプします。
17 対象データオブジェクトが今開いている Access ファイルそのものであることを定義しています。
19-25 対象データオブジェクトの中に、入力パラメータで指定した名称と同じテーブルがあるか確認し、もしあればそのテーブルを削除します。
27-28 conn ヘ SQL 構文を発行してデータテーブルのフィールド名とその属性のペアでフィールドを定義しています。このフィールド名の型指定は次のようになっております。
  • TEXT:短い文字列型
  • DATETIME:日付/時刻型
30-34 この関数の中で使用したオブジェクトを閉じ、(メモリ)を開放します。
36-37 作成したテーブルをナビゲーションウインドウの中で表示します。
38-39 この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。
42-46 この関数の中で使用したオブジェクトを閉じ、(メモリ)を開放します。
48-49 ナビゲーションウインドウをリフレッシュします。
50-51 この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。

まとめ

この記事では「指定フォルダ配下のファイル名を保存するためのテーブルを自動生成する」ために利用可能な MakeBookNameTable というユーザー定義関数について紹介しました。 この情報が読者のお役に立てば幸いです。

ライブラリ一覧