Maarten fragt sich, ob es eine Möglichkeit gibt, die Größe jedes Arbeitsblatts in einer Arbeitsmappe herauszufinden. Er hat eine Arbeitsmappe mit fast 100 Arbeitsblättern und möchte die Größe der Arbeitsmappendatei reduzieren. Er weiß jedoch nicht, welche Arbeitsblätter die größten sind.

Das Herausfinden der „Größe“ einzelner Arbeitsblätter hängt zum großen Teil davon ab, was unter „Größe“ zu verstehen ist. Bedeutet das die Anzahl der verwendeten Zellen? Die verwendeten Spalten und Zeilen? Wie viel Text ist im Arbeitsblatt gespeichert? Die Liste der Metriken könnte weiter und weiter gehen.

Das Problem ist, dass Fragen wie diese die Marke verfehlen; In einem Arbeitsblatt können viele, viele Elemente gespeichert sein. Beispielsweise kann es Kommentare, Formeln, Text, Diagramme, Audiodateien und eine beliebige Anzahl anderer Elemente enthalten. Ein Diagramm kann in Bezug auf die Anzahl der Zellen größer sein als ein anderes, das andere kann jedoch in Bezug auf Objekte (wie Diagramme oder PivotTables) größer sein.

Die einzige Möglichkeit, die relative Größe von Arbeitsblättern zu vergleichen, besteht darin, jedes Arbeitsblatt in einer eigenen Arbeitsmappe zu speichern und dann die Größe jeder resultierenden Arbeitsmappe zu untersuchen. Dies beantwortet offensichtlich nicht genau, wie groß jedes einzelne Arbeitsblatt ist, da das Speichern einer Arbeitsmappe zusätzlichen Aufwand in die gespeicherte Datei bringt. Wenn jedoch jedes Arbeitsblatt auf die gleiche Weise gespeichert wird, hat jedes einen vergleichbaren Overhead und kann daher miteinander verglichen werden, um festzustellen, welches größer ist.

Das folgende Makro fügt der aktuellen Arbeitsmappe ein Arbeitsblatt hinzu, um die Größe jeder erstellten Arbeitsmappe aufzuzeichnen. Anschließend wird jedes Arbeitsblatt durchlaufen und in einer individuellen Arbeitsmappe gespeichert. Die Größe der Arbeitsmappe wird dann bestimmt, aufgezeichnet und die neue Arbeitsmappe gelöscht.

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

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (11112) gilt für Microsoft Excel 97, 2000, 2002 und 2003.

Eine Version dieses Tippes für die Multifunktionsleistenoberfläche von Excel (Excel 2007 und höher) finden Sie hier: