目次
指定フォルダ配下のファイル名を自動取得する
この記事では「指定フォルダ配下のファイル名を自動取得する」ために利用可能な GetBookNameList というユーザー定義関数について紹介します。
この情報が読者のお役に立てば幸いです。
解決できること
Microsoft Access の中でここで紹介する
GetBookNameList
をマクロの中で呼び出すと%USERPROFILE% を含めたフルパス名 、ファイル名 、ファイル作成日時 を簡単に取得できます。
ここに %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows 10 搭載 PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。
読んでほしい方
こうした Microsoft Access VBA を使ったアプリケーションをこれから作ろうと思っている方、今まで VBA によるアプリケーションを作ってきたが、そのツールを第三者に提供する際に、フォルダの保存パス名等の利用者個人に紐づいた環境差分をVBAのプログラムの中にじかに書くのに抵抗がある方。
GetBookNameList関数 の紹介
説明
“FileNamesList” テーブルの中に %USERPROFILE% からの相対パスで指定したフォルダ配下に存在する全てのファイルの フルパス名 、ファイル名 、ファイル作成日時 を取得します。
参照オブジェクト
この関数を利用するためにはこの関数の実行前に
データベースツール > Visual Basic > ツール > 参照設定
の中で
- Microsoft Office 16.0 Access Database engine
- Microsoft ActiveX Data Objects 6.1 Library
にチェックを入れる必要があります。
利用例
本ツールの利用前にまず
で紹介した MakeBookNameTable を使い “FileNamesList” テーブルを作成します。
次に Access のマクロ定義例えば “M0020_Call_GetBookNameList_FileNameList” のように
If GetBookNameList("Downloads","FileNamesList")>0 Then
メッセージボックス ("Downloads" フォルダからのファイル名の取得に失敗しました。,はい,なし)
If 文の最後
のように GetBookNameListを “Downloads“、,”FileNamesList” といったパラメータを付けて呼び出します。ここに “Downloads” はファイル名を取得したい指定フォルダの %USERPROFILE% からの相対パス名、 “FileNamesList” はファイルの フルパス名 、ファイル名 、ファイル作成日時 を格納するテーブルの名前です。
この “M0020_Call_GetBookNameList_FileNameList” のでデザインビューを閉じて、この ”M0020_Call_GetBookNameList_FileNameList” マクロをダブルクリックすると、このマクロが実行されこの中で GetBookNameListが実行されたあと、この”FileNamesList” を 「開く(O)」 で見ると
のように “FileNamesList” テーブルの中に指定フォルダに保存されている、ファイルの名前と、その作成日が格納されていることがわかります。
引数
属性 | 意味 | |
---|---|---|
フォルダ名の絶対パス名 | 文字型 | ファイル名の取得をしたいフォルダ名の絶対パス名 |
テーブル名 | 文字型 | 作成するテーブルの名前を””で囲んだ文字列で関数のパラメータとして指定します。 |
戻り値
値 | 意味 |
---|---|
0 | 正常終了 |
1 | 異常終了 |
VBAコード
Function GetBookNameList(target_folder_name As String, output_table_name As String) As Integer
Const C_SUCCESS As Integer = 0
Const C_FAILURE As Integer = 1
Dim fileSystemObject As Object
Dim fileObject As Object
Dim pathName As String
Dim bookName As String
Dim startPosition As Integer
Dim adodbConnestion As New ADODB.Connection
Dim recordSet As New ADODB.recordSet
Dim userProfile As String
userProfile = Environ("UserProfile") & "\"
On Error GoTo exitWithFailure
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
Set adodbConnestion = CurrentProject.Connection
recordSet.Open output_table_name, adodbConnestion, adOpenDynamic, adLockOptimistic
'ファイル名取得処理
For Each fileObject In fileSystemObject.GetFolder(userProfile & target_folder_name).Files
startPosition = InStrRev(fileObject.Path, "\") + 1
pathName = Left(fileObject.Path, startPosition - 1)
bookName = Right(fileObject.Path, Len(fileObject.Path) - startPosition + 1)
Debug.Print bookName
'テーブルにパスとファイル名を追加
recordSet.AddNew
recordSet("PathName") = pathName
recordSet("BookName") = bookName
recordSet("BookDateTime") = FileDateTime(pathName & bookName)
recordSet.Update
Next
recordSet.Close
Set fileSystemObject = Nothing
Set adodbConnestion = Nothing
GetBookNameList = C_SUCCESS
Exit Function
exitWithFailure:
Set fileSystemObject = Nothing
Set adodbConnestion = Nothing
GetBookNameList = C_FAILURE
End Function
VBAコードの簡単な説明
行番号 | 説明 |
---|---|
1 | 関数名と関数の戻り値の型(Integer:整数型)、入力パラメータの名前、型(String:文字列型)を定義しています。 |
3-4 | このプログラムの中で利用する定数C_SUCCESS(0:成功)、C_FAILURE(1:失敗)を定義しています。ここでは54行目でこの関数の戻り値が C_SUCCESS(0:成功)であるごとが明確にわかるようなコーディングの仕方になります。 |
6-7 |
この関数の中で利用される FileSystemObject(注1)を用いたオブジェクト fileSystemObject 、fileObject の定義をしています。 |
9-12 |
この関数の中で利用される変数 pathName、bookName、 startPosition の定義をしています。 |
14-15 |
ADOの関数の中で利用される ADO(注1) を用いたオブジェクト adodbConnestion 、 recordSet の定義をします。 |
17-19 | Environ 関数を利用して利用者の %USERPROFILE% に相当する絶対パス名 userProfileを取得します。 |
21 | この関数の実行中にエラーが発生したときの例外処理として、exitWithFailure にジャンプします。 |
23-24 | ファイルシステムにアクセスするための fileSystemObject、adodbConnestion を定義し、対象データオブジェクトが今開いている Access ファイルそのものであることを定義しています。 |
26 | 入力パラメータとして指定された出力用テーブルを書き込み可能テーブルとしてオープンします。 |
29-45 | 入力パラメータとして指定された対象フォルダ配下に存在するファイル名を一つづつ読み込み、その絶対パス名(=入力された対象フォルダパス名)、ファイル名、ファイル作成日を出力用テーブルに書き込みます。 |
47 |
出力用テーブルをクローズします。 |
49-50 | この関数の中で使用したオブジェクトを(メモリ)開放します。 |
51-52 | この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。 |
54-56 | この関数の中で使用したオブジェクトを(メモリ)開放します。 |
57-58 | この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。 |
(注1) ADO (ActiveX Data Objects) : DAOの後継としてMicrosoftが仕様策定した統一的方法でデータベースを操作、参照するためのソフトウェア部品のパッケージおよびその呼び出し規約(API)。ActiveXコントロールとして様々なソフトウェアやプログラミング言語から共通の方法で簡単にデータベースにアクセスでき、また表計算ソフトのワークシートやCSVファイルなどを含む様々な形式のデータに同じ手順でアクセスすることができる。
(注2) FileSystemObject: WSH(Windows Scripting Hosts)の一部として Windows のファイル操作を行うオブジェクト。
まとめ
この記事では「指定フォルダ配下のファイル名を自動取得する」ために利用可能な GetBookNameList というユーザー定義関数について紹介しました。この情報が読者のお役に立てば幸いです。