Apportare modifiche in un gruppo di cartelle di lavoro (Microsoft Excel)
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.xls c:\myfiles\second workbook.xls c:\myfiles\third workbook.xls
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 & "*.xls" 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 .Xls) 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 & "\*.xls" 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 (3176) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: