KB0204: Einige Excel-Dateien mit Datenverknüpfungen sind langsam

Problem

Wenn eine Excel-Datei Excel-Datenverknüpfungen enthält (siehe Excel-Datenverknüpfungen) und zu viele Zellformatvorlagen aufweist, kann das Scrollen sehr langsam werden und Excel scheint nicht mehr zu reagieren.

Dieses Problem kann auftreten, wenn die Excel-Datei mehr als ca. 3000 Zellformatvorlagen enthält. Sie können die Anzahl der Zellformatvorlagen mit dem folgenden VBA-Befehl im Immediate Window überprüfen:

print Activeworkbook.Styles.Count Mehr lesen

Die Schritte zur Überprüfung im Detail:

  1. Drücken Sie Alt+F11, um den VBA-Editor zu öffnen.
  2. Wechseln Sie zum Immediate Window. Wenn es nicht sichtbar ist, können Sie es anzeigen, indem Sie auf View > Immediate Window klicken.
  3. Geben Sie den folgenden Befehl ein und drücken Sie Enter
    print Activeworkbook.Styles.Count

Lösung: Betroffene Arbeitsmappen bereinigen

  • Kopieren Sie Ihre Arbeitsblätter in eine neue Arbeitsmappe Mehr lesen

    In Office 2013 und höher verhindert das Kopieren von Arbeitsblättern zwischen Arbeitsmappen standardmäßig, dass sich nicht verwendete Zellformatvorlagen ansammeln:

    • Wählen Sie alle Blätter in Ihrer Arbeitsmappe aus, indem Sie SHIFT gedrückt halten und auf das erste und letzte Arbeitsblatt klicken
    • Klicken Sie mit der rechten Maustaste auf die Auswahl: Move or copy… > To book: (new book) und aktivieren Sie Create a copy > OK
    • Speichern Sie die neue Arbeitsmappe unter einem neuen Namen

  • Bereinigen Sie Ihre Arbeitsmappen mit einem Bereinigungstool Mehr lesen

    Verwenden Sie das von Microsoft in KB213904 empfohlene Bereinigungstool. Klicken Sie im XLStyles Tool auf Get Excel File, aktivieren Sie Force all cell styles to 'Normal' und klicken Sie dann auf Process File. Wenn Excel mit der bereinigten Datei geöffnet wird, speichern Sie sie unter einem neuen Namen.

  • Entfernen Sie benutzerdefinierte Zellformatvorlagen aus Ihrer Arbeitsmappe mithilfe eines VBA-Makros Mehr lesen

    Öffnen Sie den VBA-Editor mit Alt+F11. Wählen Sie Ihre Arbeitsmappe aus und klicken Sie auf Insert > Module. Fügen Sie dann eines der folgenden Makros ein und führen Sie es aus, indem Sie F5 drücken:

    DeleteCustomStyles() entfernt alle benutzerdefinierten Zellformatvorlagen aus Ihrer Arbeitsmappe.

    Sub DeleteCustomStyles()
    Dim st As Style
    Dim i, i_cust As Long
    i_cust = 0
    For i = (ActiveWorkbook.Styles.Count) To 1 Step -1
    	With ActiveWorkbook.Styles(i)
    		If .BuiltIn = False Then
    			On Error Resume Next
    			.Locked = False
    			On Error GoTo 0
    			If Not .Locked Then
    				.Delete
    				i_cust = i_cust + 1
    			End If
    		End If
    	End With
    	If (i Mod 100) = 0 Then Debug.Print i
    Next
    MsgBox "Gelöschte Formatvorlagen: " & i_cust & " Formatvorlagen" & Chr(13) & "Verbleibende Formatvorlagen: " & ActiveWorkbook.Styles.Count
    End Sub

    Remove_Styles() entfernt nur nicht verwendete benutzerdefinierte Zellformatvorlagen aus Ihrer Arbeitsmappe. Es ähnelt dem obigen Makro, kann jedoch sehr lange dauern. Das Makro wurde vom Microsoft Office Support bereitgestellt.

    Option Explicit
    Dim st_array() As String
    Dim i_x As Long
    Sub Remove_Styles()
    Dim stname As String
    Dim ustname As String
    Dim uc As Range
    Dim retval As Boolean
    Dim ust As Style
    Dim sh As Worksheet
    i_x = 0
    For Each sh In ActiveWorkbook.Worksheets
        For Each uc In sh.UsedRange
            stname = uc.Style.Name
            retval = Check_Array(stname)
            If retval = False Then
            ReDim Preserve st_array(i_x)
            st_array(i_x) = stname
            i_x = i_x + 1
            End If
        Next uc
    Next sh
    For Each ust In ActiveWorkbook.Styles
        If ust.BuiltIn = False Then
            ustname = ust.Name
            retval = Delete_Styles(ustname)
            On Error Resume Next
            If retval = True Then ust.Delete
            On Error GoTo 0
        End If
    Next ust
    End Sub
    Function Delete_Styles(stylename As String) As Boolean
    Delete_Styles = True
    Dim i_y As Long
    For i_y = 0 To i_x - 1
        If st_array(i_y) = stylename Then Delete_Styles = False
    Next i_y
    End Function
    Function Check_Array(stylename As String) As Boolean
    Check_Array = False
    Dim i_y As Long
    For i_y = 0 To i_x - 1
        If st_array(i_y) = stylename Then Check_Array = True
    Next i_y
    End Function

Die beste Lösung wäre, das Einfügen nicht verwendeter Zellformatvorlagen zu verhindern. Dafür müsste Microsoft jedoch einen Fehler in Excel 2007 und höher beheben. Bisher hat Microsoft die geschäftlichen Auswirkungen nicht als groß genug eingestuft, um diesen Fix bereitzustellen. Wenn Ihr Unternehmen mit Microsoft einen Servicevertrag für den Office-Support abgeschlossen hat und Sie sich wegen einer Lösung an Microsoft wenden möchten, geben Sie bitte folgende Microsoft-interne Fallnummer an: 113012810172527.

Erläuterung

Einige .xlsx-Arbeitsmappen enthalten aufgrund von Fehlern und problematischem Code-Design in Excel sehr viele Zellformatvorlagen (mehrere zehntausend). Dazu tragen auch Reporting-Tools bei, die manchmal unnötig viele Zellformatvorlagen erzeugen.