2016-08-23 4 views
0

マクロを凌駕するのは初めてです。複数のサブフォルダを持つ単一のマスターフォルダを読み込むマクロを作成したいと考えています。 すべてのサブフォルダの最初のサブフォルダ内の.xlsファイルを探しています(.xlsが見つかるまで続行します)。ファイルを開き、ファイルを編集して保存して終了し、前のサブフォルダに戻って2番目のサブフォルダに移動します。そのフォルダ内にサブフォルダがなくなるまで繰り返します。マスターフォルダーを持つすべてのサブフォルダーとファイルを通過するまで、サブフォルダーを繰り返し続けます。全体のマスターフォルダ内で複数のサブフォルダをスキャンするにはどうすればよいですか?

編集する必要がある.xlsファイルを見つける前に、深さ4または5の深さにすることができます。私は仕事でいくつかの暇な時間を持っていること:)

あなたは、あなたのニーズに合わせてrecursionが必要になります

+3

S.Oへようこそ!何か試しましたか?もしそうなら、コードを提供して、[ツアー](http://stackoverflow.com/tour)と[質問する](http://stackoverflow.com/help/how-to-ask)を見てください。 )。フレンドリーリマインダー:StackOverflowは "あなたのためのコード"サービスプロバイダーではありません。 [VBA入門](https://blog.udemy.com/excel-macros-tutorial/)ヒント:フォーラムでも検索してみてください。 – Sgdva

答えて

1

ラッキーます。説明のためのラフな擬似コード:VBAで

processFiles(folder) 
    for each subfolder in folder 
     for each file in subfolder 
      Do modifications 
     next 
     call processFiles(subFolder) 
    next 
end 

、それは次のようになります。

Sub openAllXlsFilesInSubDirectoriesAndModifyThem() 
    Dim myPath As String 
    myPath = ThisWorkbook.Path 

    openAllXlsFilesInSubDirectoriesAndModifyThemRecursive (myPath) 
End Sub 

Private Sub openAllXlsFilesInSubDirectoriesAndModifyThemRecursive(currentFolder As String) 
    ' Get a list of subdirs 
    Dim fileSystem As Object 
    Set fileSystem = CreateObject("Scripting.FileSystemObject") 

    Dim folder 
    Set folder = fileSystem.GetFolder(currentFolder) 

    Dim file 
    Dim Workbook 

    ' Go down the folder tree 
    Dim subFolder 
    For Each subFolder In folder.SubFolders 
     ' Go through all files in that subfolder 
     For Each file In subFolder.Files 
      ' Check if the file has the right extension 
      Debug.Print file.Name 
      If Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".")) = "xls" Then 
       ' Open the file 
       Set Workbook = Workbooks.Open(file.Path & "\" & file.Name) 

       ' Operate on the file 
       Workbook.Sheets(1).Range("A1").Value = "edited" 

       ' Save the file 
       Workbook.Save 

       ' Close the file 
       Workbook.Close 
      End If 
     Next 

     ' Check all subfolders of this subfolder 
     openAllXlsFilesInSubDirectoriesAndModifyThemRecursive subFolder.Path 
    Next 
End Sub 
関連する問題