Maarten si chiede se esiste un modo per scoprire la dimensione di ogni foglio di lavoro in una cartella di lavoro. Ha una cartella di lavoro con quasi 100 fogli di lavoro e desidera ridurre le dimensioni del file della cartella di lavoro. Tuttavia, non sa quali sono i fogli di lavoro di dimensioni maggiori.

La determinazione della “dimensione” dei singoli fogli di lavoro dipende, in gran parte, da cosa si intende per “dimensione”. Significa il numero di celle utilizzate? Le colonne e le righe utilizzate? Quanto testo è memorizzato nel foglio di lavoro? L’elenco delle metriche potrebbe continuare all’infinito.

Il problema è che domande come queste mancano il bersaglio; un foglio di lavoro può contenere molti, molti elementi memorizzati su di esso. Ad esempio, potrebbe contenere commenti, formule, testo, grafici, file audio e un numero qualsiasi di altri elementi. Un grafico può essere più grande di un altro in termini di numero di celle, ma l’altro potrebbe essere più grande in termini di oggetti (come grafici o tabelle pivot).

L’unico vero modo per confrontare le dimensioni relative dei fogli di lavoro è salvare ogni foglio di lavoro nella propria cartella di lavoro e quindi esaminare le dimensioni di ciascuna cartella di lavoro risultante. Questo ovviamente non risponde esattamente alla dimensione di ogni singolo foglio di lavoro perché l’atto di salvare una cartella di lavoro introduce un sovraccarico aggiuntivo nel file salvato. Tuttavia, se ogni foglio di lavoro viene salvato allo stesso modo, ognuno avrà un overhead comparabile e quindi potrà essere confrontato tra loro per vedere quale è più grande.

La seguente macro aggiunge un foglio di lavoro alla cartella di lavoro corrente per registrare le dimensioni di ogni cartella di lavoro creata. Quindi passa attraverso ogni foglio di lavoro e lo salva in una singola cartella di lavoro. La dimensione della cartella di lavoro viene quindi determinata, registrata e la nuova cartella di lavoro eliminata.

Sub WorksheetSizes()

Dim wks As Worksheet     Dim c As Range     Dim sFullFile As String     Dim sReport As String     Dim sWBName As String

sReport = "Size Report"

sWBName = "Erase Me.xls"

sFullFile = ThisWorkbook.Path & _       Application.PathSeparator & sWBName

' Add new worksheet to record sizes     On Error Resume Next     Set wks = Worksheets(sReport)

If wks Is Nothing Then         With ThisWorkbook.Worksheets.Add(Before:=Worksheets(1))

.Name = sReport             .Range("A1").Value = "Worksheet Name"

.Range("B1").Value = "Approximate Size"

End With     End If     On Error GoTo 0     With ThisWorkbook.Worksheets(sReport)

.Select         .Range("A1").CurrentRegion.Offset(1, 0).ClearContents         Set c = .Range("A2")

End With

Application.ScreenUpdating = False     ' Loop through worksheets     For Each wks In ActiveWorkbook.Worksheets         If wks.Name <> sReport Then             wks.Copy             Application.DisplayAlerts = False             ActiveWorkbook.SaveAs sFullFile             ActiveWorkbook.Close SaveChanges:=False             Application.DisplayAlerts = True             c.Offset(0, 0).Value = wks.Name             c.Offset(0, 1).Value = FileLen(sFullFile)

Set c = c.Offset(1, 0)

Kill sFullFile         End If     Next wks     Application.ScreenUpdating = True 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 (11112) si applica a Microsoft Excel 97, 2000, 2002 e 2003.

Puoi trovare una versione di questo suggerimento per l’interfaccia a barra multifunzione di Excel (Excel 2007 e versioni successive) qui: