mercoledì 18 gennaio 2012

Macro Excel: eseguire una macro a tutti i file di una cartella (e sottocartelle)

Una volta creata la nostra macro per modificare il nostro file, come possiamo applicarla automaticamente a tutti file di una cartella e relative sottocartelle? Semplice, con un'altra macro!

Quindi, dopo aver fatto la nostra macro "principale" (ovvero quella che vogliamo applicare ai files) la chiamiamo MyMacro (si fa scrivendo MyMacro dopo il primo Sub che troverete in alto alla macro) e aggiungiamo altre due nuove macro come queste:
Sub ExecuteApplyMacroToAllFiles()

    'Change the path to the main folder
    Call ApplyMacroToAllFiles("C:\test folder")

End Sub

Sub ApplyMacroToAllFiles(ByVal MyPath As String)

    Dim FileSys As Object
    Dim objFolder As Object
    Dim objSubFolder As Object
    Dim objFile As Object
    Dim wkbOpen As Workbook
   
    Set FileSys = CreateObject("Scripting.FileSystemObject")
    Set objFolder = FileSys.GetFolder(MyPath)

    Application.ScreenUpdating = False
   
    For Each objSubFolder In objFolder.SubFolders
        For Each objFile In objSubFolder.Files
            Set wkbOpen = Workbooks.Open(filename:=objFile)
            'Change the name of your macro
            Call MyMacro
            wkbOpen.Close savechanges:=True
        Next
        Call ApplyMacroToAllFiles(objSubFolder.Path)
    Next

    Application.ScreenUpdating = True

End Sub
In grassetto ho evidenziato le modifiche da fare, la prima è la cartella da usare (quella che contiene i nostri file) e la seconda è il nome della nostra macro da applicare.

Una volta fatto questo ci basta avviare la macro chiamata "ExecuteApplyMacroToAllFiles" e vedremo il nostro excel macinare un file dopo l'altro.