David ha diverse cartelle di lavoro che contengono diversi fogli di lavoro in ciascuna di esse. Vorrebbe combinare un determinato foglio di lavoro (solo uno) da ciascuna di queste cartelle di lavoro in una nuova cartella di lavoro. Sa come farlo manualmente utilizzando Sposta o Copia foglio, ma vorrebbe un modo per farlo in modo più automatico, soprattutto perché potrebbero esserci molte cartelle di lavoro che deve “combinare” in questo modo.

Esistono diversi modi per affrontare questo problema e tutti prevedono l’uso di macro. (Questo non dovrebbe sorprendere: le macro sono progettate per eseguire rapidamente operazioni manuali noiose.)

La seguente macro è semplice nel design; scorre tutte le cartelle di lavoro attualmente aperte e per ogni cartella di lavoro (eccetto la cartella di lavoro che contiene la macro) copia il foglio denominato “Foglio1” da quella cartella di lavoro alla cartella di lavoro contenente il codice.

Sub CopySheets1()

Dim wkb As Workbook     Dim sWksName As String

sWksName = "Sheet1"

For Each wkb In Workbooks         If wkb.Name <> ThisWorkbook.Name Then             wkb.Worksheets(sWksName).Copy _               Before:=ThisWorkbook.Sheets(1)

End If     Next     Set wkb = Nothing End Sub

Se si desidera che la macro acquisisca un foglio di lavoro diverso da Sheet1, è sufficiente modificare il valore della variabile sWksName per riflettere il nome del foglio di lavoro desiderato. Se non sai quale sarà il nome del foglio di lavoro, ma sai che il foglio di lavoro da copiare sarà sempre il secondo foglio di lavoro in ogni cartella di lavoro, puoi usare questa variazione sulla macro:

Sub CopySheets2()

Dim wkb As Workbook     Dim sWksName As String

For Each wkb In Workbooks         If wkb.Name <> ThisWorkbook.Name Then             wkb.Worksheets(2).Copy _               Before:=ThisWorkbook.Sheets(1)

End If     Next     Set wkb = Nothing End Sub

Forse il più grande svantaggio degli approcci finora è che tutte le cartelle di lavoro devono essere aperte. Questo potrebbe non essere sempre fattibile. Ad esempio, potresti avere un centinaio di cartelle di lavoro diverse in una cartella e devi combinare un foglio di lavoro da ciascuna di esse. Aprire un centinaio di cartelle di lavoro, sebbene tecnicamente possibile, probabilmente non è pratico per la maggior parte delle persone. In tal caso è necessario adottare un approccio diverso.

La seguente macro, CombineSheets, è di natura interattiva. Ti chiede diverse informazioni e quindi aggiunge fogli di lavoro alla cartella di lavoro in base alle tue risposte. Prima richiede un percorso per i fogli di lavoro (non includere la barra finale) e quindi un modello da utilizzare per le cartelle di lavoro. È possibile specificare un modello di cartella di lavoro utilizzando i normali caratteri jolly asterisco () e punto interrogativo (?). Ad esempio, un modello di corrisponderebbe a tutte le cartelle di lavoro, mentre un modello di Budget20 ??

restituirà solo le cartelle di lavoro che hanno “Budget20” all’inizio e due caratteri qualsiasi dopo.

Sub CombineSheets()

Dim sPath As String     Dim sFname As String     Dim wBk As Workbook     Dim wSht As Variant

Application.EnableEvents = False     Application.ScreenUpdating = False     sPath = InputBox("Enter a full path to workbooks")

ChDir sPath     sFname = InputBox("Enter a filename pattern")

sFname = Dir(sPath & "\" & sFname & ".xl*", vbNormal)

wSht = InputBox("Enter a worksheet name to copy")

Do Until sFname = ""

Set wBk = Workbooks.Open(sFname)

Windows(sFname).Activate         Sheets(wSht).Copy Before:=ThisWorkbook.Sheets(1)

wBk.Close False         sFname = Dir()

Loop     ActiveWorkbook.Save     Application.EnableEvents = True     Application.ScreenUpdating = True End Sub

Quando si esegue la macro, viene richiesto anche il nome di un foglio di lavoro da copiare da ciascuna cartella di lavoro corrispondente. Fornire un nome e se un foglio di lavoro di questo tipo esiste nella cartella di lavoro, viene copiato all’inizio della cartella di lavoro corrente.

Se preferisci non creare la tua macro per combinare fogli di lavoro, potresti prendere in considerazione il componente aggiuntivo RDBMerge creato dall’MVP di Excel Ron de Bruin.

Puoi trovarlo gratuitamente qui:

http://www.rondebruin.nl/win/addins/rdbmerge.htm

_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 (7425) si applica a Microsoft Excel 97, 2000, 2002 e 2003.