|
▼えっちゃん さん:こんにちは〜
>おかげですぐに作業が終わったのですが、これを機にマクロを覚えようと勉強を始めました。
まず FileSystemObject についてある程度の知識が必要と思われます。
このプログラムのポイントは
FileSystemObjectオブジェクトの GetFolderメソッド
を使って、
「指定フォルダ内の Filesコレクションと SubFoldersコレクション
を取得」しているところにあるように思われます。
つぎに、SubFoldersコレクションを得たら、それぞれのSubFolderについて
また「指定フォルダ内の Filesコレクションと SubFoldersコレクション
を取得」するために、《自身を呼び出し》ています。これが再帰呼び出し
とよばれ、プログラミングでも結構高度な処理なのです。
'参考までに、
同じ処理を 別の書き方で記述してみましたので、
元のコードと比較してみてください。
--------------------------------------------------------
Option Explicit
'指定フォルダのファイル名を(サブフォルダも含めて)シートに書き出す
Sub Macro2()
Dim TopFolder As String
'調べる先頭フォルダを選択します
TopFolder = フォルダを指定する()
If Len(TopFolder) = 0 Then Exit Sub
Cells.Clear
'先頭フォルダについてフォルダ情報を取得します
■フォルダ情報 TopFolder, 0, 1
End Sub
Sub ■フォルダ情報(FolderName As String, n As Long, Level As Long)
Dim objFolder As Object
Dim myFile As Variant
Dim myFolder As Variant
'Foldor の名前をセルに書き出します
n = n + 1
Cells(n, Level) = FolderName
Set objFolder = CreateObject("Scripting.FileSystemObject") _
.GetFolder(FolderName)
'Folder内のファイルを取得します →セルに書き出します
For Each myFile In objFolder.Files
n = n + 1
Cells(n, Level + 1) = myFile.Name
Next
'こんどは Folder内のSubFolder についてフォルダ情報を取得します
For Each myFolder In objFolder.SubFolders
Level = Level + 1
■フォルダ情報 FolderName & "\" & myFolder.Name, n, Level
Next
Level = Level - 1
End Sub
Function フォルダを指定する() As String
Dim Shell As Object
Set Shell = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", _
0, CreateObject("WScript.Shell").SpecialFolders("desktop"))
If Shell Is Nothing Then
フォルダを指定する = ""
Else
フォルダを指定する = Shell.Self.Path
End If
End Function
|
|