FSO 指定ルートの配下全て(深階層まで)のファルダパスとフォルダ名取得(深階層まで)
※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
'************************************************** '配下全てのThumbs.dbを削除するサンプル例 '************************************************** Private lngRootCnt As Long Private objFSO As Object Private GetFileName As String '*処理 Private lngCnt As Long '*処理 Private Sub MakeSubFolderList() '************************************************** '指定ルートの配下全てのファルダパスとフォルダ名取得 '************************************************** GetFileName = "Thumbs.db" '検索するファイル名'*処理 Dim strStartRoot As String Set objFSO = New FileSystemObject strStartRoot = ThisWorkbook.Path lngRootCnt = 1 '再帰処理の為、サブルーチンをコールします Call SubFolderSearch(strStartRoot) Set objFSO = Nothing End Sub Private Sub SubFolderSearch(StartFolderPath As String) '************************************************** 'フォルダパス及びフォルダ名取得再帰処理 '************************************************** '無限ループ処理の為、フォルダやファイルの削除など行う場合は '必ずバックアップを行って下さい。 '追加処理をした場合PCのハングアップの危険もあります。 '一応動作確認は行ってます。 Dim SearchMainFolder As Folder Dim SearchSubFolderA As Folder Dim SearchSubFolderB As Folder Dim objFolder As Object '*処理 Dim objFile As Object '*処理 Dim strFilePath As String '*処理 Dim strFileName As String '*処理 '*処理---------------------------------------------------------------/ 'フォルダ直下 With objFSO Set objFolder = .GetFolder(StartFolderPath) For Each objFile In objFolder.Files strFilePath = objFile.Path strFileName = .GetFileName(strFilePath) If InStr(1, strFileName, GetFileName) <> 0 Then If MsgBox(strFilePath & vbNewLine & "Delete?", vbOKCancel, strFileName) = vbOK Then lngCnt = lngCnt + 1 '処理数 '[Kill]関数では"Thumbs.db"等の特殊ファイルは削除不可 .GetFile(strFilePath).Delete End If End If Next Set objFolder = Nothing End With '*処理---------------------------------------------------------------/ 'フォルダ数 lngRootCnt = lngRootCnt + 1 With objFSO Set SearchMainFolder = .GetFolder(StartFolderPath) For Each SearchSubFolderA In SearchMainFolder.SubFolders '*処理---------------------------------------------------------------/ 'フォルダ直下 Set objFolder = .GetFolder(SearchSubFolderA) For Each objFile In objFolder.Files strFilePath = objFile.Path strFileName = .GetFileName(strFilePath) If InStr(1, strFileName, GetFileName) <> 0 Then If MsgBox(strFilePath & vbNewLine & "Delete?", vbOKCancel, strFileName) = vbOK Then lngCnt = lngCnt + 1 '処理数 '[Kill]関数では"Thumbs.db"等の特殊ファイルは削除不可 .GetFile(strFilePath).Delete End If End If Next Set objFolder = Nothing '*処理---------------------------------------------------------------/ 'フォルダ数 lngRootCnt = lngRootCnt + 1 If SearchSubFolderA.SubFolders.Count > 0 Then For Each SearchSubFolderB In SearchSubFolderA.SubFolders Call SubFolderSearch(SearchSubFolderB.Path) Next SearchSubFolderB End If Next SearchSubFolderA End With Set SearchMainFolder = Nothing Set SearchSubFolderA = Nothing Set SearchSubFolderB = Nothing End Sub Sub SetScrrunDLL() '***************************************************** 'このコードが実装されたブックが「FileSystemObject」 'が使えるように参照設定をする。 '***************************************************** On Error GoTo MyERROE: '参照設定 ThisWorkbook.VBProject.References.AddFromFile "C:\WINDOWS\system32\scrrun.dll" MyERROE: End Sub |