Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13937 / 76733 ←次へ | 前へ→

【68296】Re:ファイル名を取得するマクロの意味
発言  kanabun  - 11/2/21(月) 12:21 -

引用なし
パスワード
   ▼えっちゃん さん:こんにちは〜

>おかげですぐに作業が終わったのですが、これを機にマクロを覚えようと勉強を始めました。

まず 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

2 hits

【68283】ファイル名を取得するマクロの意味 えっちゃん 11/2/20(日) 16:13 質問
【68284】Re:ファイル名を取得するマクロの意味 かみちゃん 11/2/20(日) 16:48 発言
【68296】Re:ファイル名を取得するマクロの意味 kanabun 11/2/21(月) 12:21 発言
【68302】Re:ファイル名を取得するマクロの意味 kanabun 11/2/21(月) 21:05 発言
【68310】Re:ファイル名を取得するマクロの意味 neptune 11/2/22(火) 11:17 発言
【68319】Re:ファイル名を取得するマクロの意味 kanabun 11/2/23(水) 19:25 発言
【68320】Re:ファイル名を取得するマクロの意味 neptune 11/2/23(水) 21:54 発言
【68311】Re:ファイル名を取得するマクロの意味 neptune 11/2/22(火) 11:24 発言

13937 / 76733 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free