Office2003から2007以降のバージョンに変えた時に使えなくなる代表的なモノが「FileSearch」オブジェクトではないだろうか?
作業効率向上のため、ファイルを検索、読み込んで、編集して、書き込んで、保存のような使い方など…
そのため、Office2007、2010、2013などは「FileSystemObject」に替える必要がある。
【追記:2014/05/24】
サブディレクトリ検索、ソート、拡張子フィルタを実装したテンプレートを作成した。
→ 【VBA】指定フォルダ配下のブックを操作するためのマクロテンプレート
Office 2003まで
Sub MyFileSearch(ByVal path As String)
Dim fso As Object
Set fso = Application.FileSearch
With fso
.LookIn = path '--検索フォルダ
.Filename = "*.csv" '--ファイル名
.SearchSubFolders = True '--サブフォルダ検索
If .Execute(SortBy:=msoSortByFileName _
, SortOrder:=msoSortOrderAscending) Then
For i = 1 To .FoundFiles.Count Step 1
'-- ファイルパスの取得
Debug.Print .FoundFiles(i)
Next
End If
End With
End Sub
FileSearchオブジェクトでは
SearchSubFolders
やSortBy
を使うことで、サブディレクトリの検索や取得時にソートすることができた。しかし、「FileSystemObject」ではサブディレクトリ検索は面倒になる。
ファイル取得時のソートはできない。
Office 2007以降
Sub MyFileSystemObject(path)
Dim fso As Object
Dim file, folder As Variant
Set fso = CreateObject("Scripting.FileSystemObject")
'-- フォルダパスの取得
For Each folder In fso.GetFolder(path).SubFolders
'-- サブディレクトリ内まで検索するには再帰的に関数を呼び出す
MyFileSystemObject folder.path
Next
'-- ファイルパスの取得
For Each file In fso.GetFolder(path).Files
Debug.Print file.Path
Next
End Sub
サブディレクトリの検索は、9行目にあるように再帰的に関数を呼び出す必要がある。
ソースだけ見ればサッパリしたようなしていないような……。
ファイル取得時のソートは、次回以降にまとめる。
【2013/10/19 追記】
【VBA】FileSystemObjectでファイル名(拡張子)の指定+ソートして取得する
以上
0 件のコメント :
コメントを投稿