|
もとさん、こんにちは。
個人的意見ですが、
ファイルを検索している最中に実際のマクロをするのではなく、
1.文字列配列に、該当ファイル名を格納する
2.1項の文字列配列を「指定順序」に並び替える
3.2項の文字列配列に対してマクロを実行する
というように変更したほうが良いと思います。
配列を取得する例を参考までに....
#すいません、例にFileSystemObjectをつかっているので、
#MicrosoftScriptiongRuntime参照設定してください。
うまくできるといいですね。
Private mobj As Scripting.FileSystemObject
Sub Main()
Dim strpath As String
Dim fld As Scripting.Folder
Dim strFilename() As String 'ファイルパス格納配列
Dim iIdx As Long
Set mobj = New Scripting.FileSystemObject
strpath = "C:\Home"
Set fld = mobj.GetFolder(strpath)
'ファイルパス格納配列初期化
strFilename = VBA.Split("", ",")
'ファイルパス格納配列にファイルパスを格納する
Call getFileName(fld, strFilename)
'該当するパスがなければ、処理を終了する
If UBound(strFilename) = -1 Then Exit Sub
'取得したファイル名をイミディエイトに出力
'本来はここで、実行させるマクロを記述してください。
For iIdx = LBound(strFilename) To UBound(strFilename)
Debug.Print (strFilename(iIdx))
Next
Set mobj = Nothing
End Sub
Private Sub getFileName(ByRef rFolder As Scripting.Folder, _
ByRef rStr() As String)
Dim iFile As Scripting.File
Dim iFolder As Scripting.Folder
'
For Each iFile In rFolder.Files
'検索条件にあうものだけを取得して下さい。
'if Ifile.name = ”””-------- then
ReDim Preserve rStr(UBound(rStr) + 1)
rStr(UBound(rStr)) = iFile.Path & "\" & iFile.Name
'End If
Next
'検索するのが2階層でいいなら、モジュールを書き直して下さい。
'このままだと、一番最後の階層のファイルまで探しに行きます。
For Each iFolder In rFolder.SubFolders
Call getFileName(iFolder, rStr())
Next
End Sub
|
|