Ermitteln der Größe einzelner Arbeitsblätter (Microsoft Excel)
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: