Windowsのフォルダやファイルを順次取得して、Accessの次の処理を行うこともよくあります。
例えば、指定のフォルダ配下にある全てのファイルをインポートするような処理です。
その際はFSO(ファイルシステムオブジェクト)を使用すれば簡単にループ処理を実行できます。
フォルダ内の全ファイルを処理するための事前準備
フォルダ内を探索するにはFileSystemObjectを使用します。
VBAからこのライブラリを利用できるように、参照設定を追加する必要があります。
VisualBasic画面の上部メニューのツール → 参照設定 の順で選択します。
「Microsoft Script Runtime」にチェックを入れます。
この参照設定がなければコンパイルエラーとなります。
指定のパス配下の全フォルダ名を取得する
パスは画面から指定させ、そのパス配下のフォルダ名を取得し、メッセージボックスで表示するプログラムです。
尚、このプログラムでは指定したパスの直下フォルダのみ処理していますので、取得したフォルダ配下のフォルダ(孫フォルダ)は取得していません。
指定したパスの孫フォルダなども捜索したい場合は再帰的な処理を埋め込む必要があります。
'******************************************************************************* ' ルートフォルダを指定して全フォルダ探索 '******************************************************************************* Sub OpenFilesInFolder() Dim path As String Dim objFSO As FileSystemObject Dim fld As folder Dim subfld As folder path = Me.txt元フォルダ Set objFSO = CreateObject("Scripting.FileSystemObject") Set fld = objFSO.GetFolder(path) 'フォルダ内の全フォルダについて処理 For Each subfld In fld.SubFolders 'フォルダ名を表示 MsgBox subfld.Name Next 'オブジェクトをクリア Set objFSO = Nothing End Sub
指定のパス配下の全ファイル名を取得する
vbaでフォルダ内の全ファイル名を取得するコードです。
基本はサブフォルダ名を取得するコードと同じ。
ループ処理の対象が、『fld.files』か『fld.subfolders』なのかの違いだけです。
'******************************************************************************* ' ルートフォルダを指定して全ファイル探索 '******************************************************************************* Sub OpenFilesInFile() Dim path As String Dim objFSO As FileSystemObject Dim fld As Variant Dim fl As file path = Me.txt元フォルダ Set objFSO = CreateObject("Scripting.FileSystemObject") Set fld = objFSO.GetFolder(path) 'フォルダ内の全ファイルについて処理 For Each fl In fld.files 'ファイル名を表示 MsgBox fl.Name Next 'オブジェクトをクリア Set objFSO = Nothing End Sub
まとめ
VBAでフォルダ内のファイルまたはフォルダを探索して全ファイル名・フォルダ名を取得するコードをご紹介しました。
これらをベースにグルグル回しながら面倒な処理を一気に効率化しましょう!
\逆引き辞書があると便利です/
[itemlink post_id=”1386″]