指定したフォルダのサブフォルダも含めて保存されている全てのファイルのファイル名を取得してテーブルに追加するVBAのサンプルプログラムを覚書。
Office 2007以降はFileSearchオブジェクトが使用できなくなったため、代わりに"FileSystemObject"を再帰呼び出しする方法を使います。
サンプルプログラムを実行する前の準備
サンプルプログラムを実行する前に参照設定と実行に必要なテーブルを作成してください。
参照設定
サンプルプログラムの実行には"Microsoft ActiveX Data Objects Library"を参照設定する必要があります。
以下の手順で参照設定してください。
- Visual Basicエディタの[ツール]メニューをクリックして[参照設定]を選択します。
- [参照設定]画面が表示されるので、[参照可能なライブラリ ファイル]の一覧から"Microsoft ActiveX Data Objects Library"のチェックをオンにして[OK]をクリックして画面を閉じます。
"Microsoft ActiveX Data Objects Library"にはいくつかのバージョンがあるかと思います。
私の環境では6.1が一番高いバージョン番号だったので"Microsoft ActiveX Data Objects 6.1 Library"を参照設定していますが、各自の環境に合わせたバージョンを使用してください。
テーブルの作成
この記事では2つのサンプルプログラムを紹介します。
1つは取得したファイル名をフルパスを含めた文字列として1つのフィールドに保管するサンプルプログラムとパスとファイル名を分けて2つのフィールドに保管するサンプルプログラムです。
サンプルプログラムその1で使用するテーブルの作成
サンプルプログラムその1で使用するテーブルの定義を以下に記載します。
テーブル名:FileList01
フィールド名 | データ型 |
---|---|
FileName | 長いテキスト |
サンプルプログラムその2で使用するテーブルの作成
サンプルプログラムその2で使用するテーブルの定義を以下に記載します。
テーブル名:FileList02
フィールド名 | データ型 |
---|---|
FilePath | 長いテキスト |
FileName | 長いテキスト |
参照設定と2つのテーブル「FileList01」とFileList02」が作成できたら準備は終了です。
以下にサンプルプログラムを紹介します。
サンプルプログラムその1
以下に指定したフォルダのサブフォルダも含めて保存されているファイル名の一覧を取得してフルパスでテーブルに追加するサンプルプログラムを記載します。
再帰呼び出しを行うため、別のプログラムから呼び出して使用する方法になっています。
サンプルプログラム本体
Sub GetFileList01(Search_Path)
Dim objFs As Object, objFiles As Object, objFolders As Object
Dim con As New ADODB.Connection, rec As New ADODB.Recordset
Set objFs = CreateObject("Scripting.FileSystemObject")
Set con = CurrentProject.Connection
rec.Open "FileList01", con, adOpenDynamic, adLockOptimistic
'パスの取得
For Each objFolders In objFs.GetFolder(Search_Path).SubFolders
'サブフォルダまで検索するために再帰実行
GetFileList01 objFolders.path
Next
'ファイル名の取得
For Each objFiles In objFs.GetFolder(Search_Path).Files
'テーブルにファイル名を追加
rec.AddNew
rec("FileName") = objFiles.path
rec.Update
Next
End Sub
実際にサンプルプログラムを動作させる際はこちらを実行します。
Sub Call_GetFileList()
GetFileList01 "C:¥Program Files"
End Sub
上記サンプルでは、例として"C:\Program Files"フォルダを指定しています。
サンプルプログラムその2
以下にサンプルプログラムその1を少し変更してファイル名とパスを別々のフィールドに追加するサンプルプログラムを記載します。
サンプルプログラムその1と同様に実行時は別のプログラムから呼び出して実行します。
サンプルプログラム本体
Sub GetFileList02(Search_Path)
Dim objFs As Object, objFiles As Object, objFolders As Object
Dim File_Path As String, File_Name As String
Dim Start_No As Integer
Dim con As New ADODB.Connection, rec As New ADODB.Recordset
Set objFs = CreateObject("Scripting.FileSystemObject")
Set con = CurrentProject.Connection
rec.Open "FileList02", con, adOpenDynamic, adLockOptimistic
'パスの取得
For Each objFolders In objFs.GetFolder(Search_Path).SubFolders
'サブフォルダまで検索するために再帰実行
GetFileList02 objFolders.path
Next
'ファイル名の取得
For Each objFiles In objFs.GetFolder(Search_Path).Files
Start_No = InStrRev(objFiles.path, "¥") + 1
File_Name = Right(objFiles.Path, Len(objFiles.Path) - Start_No)
File_Path = Left(objFiles.path, Start_No - 1)
'テーブルにパスとファイル名を追加
rec.AddNew
rec("FilePath") = File_Path
rec("FileName") = File_Name
rec.Update
Next
End Sub
実際にサンプルプログラムを動作させるプログラム。
Sub Call_GetFileList()
GetFileList02 "C:¥Program Files"
End Sub
サブフォルダも含めて指定したフォルダのファイル名一覧を取得するサンプルプログラムまとめ
ドキュメント管理用サーバー内にフォルダ(カテゴリ分け)分けされたドキュメントの一覧をドキュメントを管理する台帳を作成するために作ったプログラムの一部を記事にしました。
Office 2007からはFileSearchオブジェクトが使えなくなってしまったため、これまで使用していたプログラムFileSystemオブジェクトを再帰呼び出しする方法に書き換えたので覚書きしました。
同じようにExcelのVBAを使ってファイルの一覧をセルに書き込むサンプルプログラムを別の記事で紹介していますので、Excelで行う場合はこちらの記事を参照してください。
コメント