Nel tempo, è molto facile creare e raccogliere un numero enorme di cartelle di lavoro di Excel. Supponi di avere un intero gruppo di cartelle di lavoro in cui devi apportare la stessa modifica. Ad esempio, potrebbe essere necessario modificare il valore memorizzato nella cella A10 di ciascuno dei fogli di lavoro in ciascuna cartella di lavoro.

Se hai solo poche cartelle di lavoro da modificare, l’attività è piuttosto semplice: carica ogni cartella di lavoro e, a turno, apporta la modifica a ciascuna di esse. Se hai un paio di centinaia di cartelle di lavoro in cui è necessario apportare la modifica, l’attività diventa più formidabile.

Se prevedi di dover eseguire questa attività solo una volta, la soluzione più semplice è creare un file di testo che contenga il percorso e il nome del file di ciascuna cartella di lavoro, una cartella di lavoro per riga. Ad esempio, potresti ritrovarti con un file con voci come questa:

c:\myfiles\first workbook.xlsx c:\myfiles\second workbook.xlsx c:\myfiles\third workbook.xlsx

Il file può contenere tante righe quante sono necessarie; non importa davvero. La cosa importante è che ogni riga sia un percorso e un nome file validi e che non ci siano righe vuote nel file.

Potresti creare più facilmente un file di questo tipo visualizzando una finestra del prompt dei comandi, navigando nella directory contenente le cartelle di lavoro e immettendo il seguente comando:

dir /b > myfilelist.txt

Ogni file nella directory finisce nel file myfilelist.txt. Dovrai caricare il file di testo in un editor di testo ed estrarlo in modo da poter eliminare voci estranee. (Ad esempio, myfilelist.txt finirà nell’elenco.) Dovrai anche aggiungere il nome del percorso all’inizio di ogni riga nel file.

Una volta completato il file, è possibile avviare Excel e utilizzare una macro per leggere il file di testo, caricare ogni cartella di lavoro elencata nel file di testo, scorrere ogni foglio di lavoro in quella cartella di lavoro, apportare la modifica appropriata e salvare la cartella di lavoro. La seguente macro eseguirà correttamente queste attività.

Sub ChangeFiles1()

Dim sFilename As String     Dim wks As Worksheet

Open "c:\myfiles\myfilelist.txt" For Input As #1     Do While Not EOF(1)

Input #1, sFilename  ' Get workbook path and name         Workbooks.Open sFilename

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True     Loop     Close #1 End Sub

Sebbene questo approccio funzioni alla grande se devi elaborare solo un singolo batch di file della cartella di lavoro, può essere reso molto più flessibile se prevedi di dover apportare tali modifiche in futuro. La seccatura più grande, ovviamente, è mettere insieme il file myfilelist.txt ogni volta che vuoi elaborare un batch di file. La flessibilità viene aggiunta se la macro può semplicemente utilizzare una directory e quindi caricare ogni cartella di lavoro da quella directory.

Sub ChangeFiles2()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String     Dim wks As Worksheet

' Change directory path as desired     dirName = "c:\myfiles\"



MyPath = dirName & "*.xlsx"

MyFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

Questa macro utilizza qualsiasi directory specificata per la variabile dirName.

Qualsiasi file della cartella di lavoro (che termina con l’estensione .Xlsx) viene caricato ed elaborato.

Un altro approccio è fare in modo che la macro chieda all’utente quale directory deve essere elaborata. È possibile utilizzare la finestra di dialogo File Excel standard per eseguire questa operazione, nel modo illustrato nella macro seguente.

Public Sub ChangeFiles3()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String

With Application.FileDialog(msoFileDialogFolderPicker)

' Optional: set folder to start in         .InitialFileName = "C:\Excel\"

.Title = "Select the folder to process"

If .Show = True Then             dirName = .SelectedItems(1)

End If     End With

MyPath = dirName & "\*.xlsx"

myFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (8939) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: