it-swarm.com.de

Zu viele verschiedene zellformate

  1. Ich habe eine riesige Datei mit 10 neu erstellten Blättern, 12 aktualisierten Blättern, 5 mit Rohdaten geladenen Blättern und 7 Blättern, die von den Makros für den Bericht verwendet werden.
  2. Ich habe vor kurzem ein neues Blatt hinzugefügt und laufe in das Excel "Zu viele verschiedene Zellenformate" problem. 

was ich versucht habe  

Ich habe einige der Google-Suchergebnisse gelesen und sie sagen, ich sollte die Formatierung vereinfachen, aber ich weiß nicht einmal, wie ich 4000 verschiedene Zellformate erhalten habe, ganz zu schweigen davon, wie viel ich welche verwende, also kann ich sie entfernen etwas. 

Es wird auch einige Male angezeigt, dass die Datei ausgeführt wird, aber nicht alle, bis sie erscheint, und dann passiert sie jedes Mal, wenn sie ausgeführt wird. Ich bin mir nicht sicher, was zu tun ist, da das Makro so viel von der Arbeit erledigt, einschließlich der Erstellung der 10 Blätter von Grund auf. 

Weiß jemand

  • ich könnte ein Makro ausführen, um eine Liste aller Zellenformate zu erhalten und wie viele Zellen sie verwenden?
  • eines Programms, dem sie vertrauen, um überschüssige Zellenformate zu entfernen? 

Vielen Dank 

19
Craig

"Zellenformate" sind kompliziert. Zellen haben eigentlich kein "Format". Sie haben eine Schriftart (die selbst einen Namen und eine Größe hat), ein NumberFormat, Height, Width, Orientation usw.

Sie müssen also definieren, was Sie unter "Format" verstehen.

Unten finden Sie den Code, um den Schriftnamen und die Schriftgröße zu erhalten. Sie können beliebige Attribute ersetzen.

Im folgenden Code wird davon ausgegangen, dass Sie ein Arbeitsblatt mit dem Namen "Formate" in der Arbeitsmappe erstellt haben. Nach dem Ausführen des Makros werden die Schriftnamen und -größen in diesem Arbeitsblatt aufgeführt.

Public Sub GetFormats()

    Dim CurrentSheet As Integer
    Dim UsedRange As Range
    Dim CurrentCell As Range
    Dim rw As Long

    Sheets("Formats").Cells.ClearContents
    rw = 1
    For CurrentSheet = 1 To Sheets.Count
        Set UsedRange = Range(Sheets(CurrentSheet).Range("A1"), Sheets(CurrentSheet).Range("A1").SpecialCells(xlLastCell))
        For Each CurrentCell In UsedRange
            FontUsed = CurrentCell.Font.Name + ":" + CStr(CurrentCell.Font.Size)
            If Sheets("Formats").Cells.Find(FontUsed) Is Nothing Then
                Sheets("Formats").Cells(rw, 1).Value = FontUsed
                rw = rw + 1
            End If
        Next
    Next CurrentSheet
End Sub
7
Mike Lewis

Das von Ihnen beschriebene Problem hat dazu geführt, dass ich (und ein Mitarbeiter) bei der Verwendung von Excel 2010 viele Stunden an Produktivität verloren haben. Der folgende VBA-Code/Makro half mir, eine .xlsm-Datei von der Verwendung von 3540-Formaten auf 34 zu reduzieren.

' Description:
'    Borrowed largely from http://www.jkp-ads.com/Articles/styles06.asp

Option Explicit

' Description:
'    This is the "driver" for the entire module.
Public Sub DropUnusedStyles()

    Dim styleObj As Style
    Dim rngCell As Range
    Dim wb As Workbook
    Dim wsh As Worksheet
    Dim str As String
    Dim iStyleCount As Long
    Dim dict As New Scripting.Dictionary    ' <- from Tools / References... / "Microsoft Scripting Runtime"

    ' wb := workbook of interest.  Choose one of the following
    ' Set wb = ThisWorkbook ' choose this module's workbook
    Set wb = ActiveWorkbook ' the active workbook in Excel


    Debug.Print "BEGINNING # of styles in workbook: " & wb.Styles.Count
    MsgBox "BEGINNING # of styles in workbook: " & wb.Styles.Count

    ' dict := list of styles
    For Each styleObj In wb.Styles
        str = styleObj.NameLocal
        iStyleCount = iStyleCount + 1
        Call dict.Add(str, 0)    ' First time:  adds keys
    Next styleObj
    Debug.Print "  dictionary now has " & dict.Count & " entries."
    ' Status, dictionary has styles (key) which are known to workbook


    ' Traverse each visible worksheet and increment count each style occurrence
    For Each wsh In wb.Worksheets
        If wsh.Visible Then
            For Each rngCell In wsh.UsedRange.Cells
                str = rngCell.Style
                dict.Item(str) = dict.Item(str) + 1     ' This time:  counts occurrences
            Next rngCell
        End If
    Next wsh
    ' Status, dictionary styles (key) has cell occurrence count (item)


    ' Try to delete unused styles
    Dim aKey As Variant
    On Error Resume Next    ' wb.Styles(aKey).Delete may throw error

    For Each aKey In dict.Keys

        ' display count & stylename
        '    e.g. "24   Normal"
        Debug.Print dict.Item(aKey) & vbTab & aKey

        If dict.Item(aKey) = 0 Then
            ' Occurrence count (Item) indicates this style is not used
            Call wb.Styles(aKey).Delete
            If Err.Number <> 0 Then
                Debug.Print vbTab & "^-- failed to delete"
                Err.Clear
            End If
            Call dict.Remove(aKey)
        End If

    Next aKey

    Debug.Print "ENDING # of style in workbook: " & wb.Styles.Count
    MsgBox "ENDING # of style in workbook: " & wb.Styles.Count

End Sub
45
Chuck The Nerd

Viele Leute scheinen auf dieses Problem zu stoßen.

Meistens ist das Problem __. Bezogen auf die übermäßige Anzahl ungenutzter und häufig beschädigter Stile Und nicht so sehr die Gesamtanzahl der Zell-eindeutigen Zellformatkombinationen. 

Ich habe ein Hilfsprogramm geschrieben, um XL2007-OOXML-Dateien zu reparieren, die unter XL2003 gespeichert werden können. Hier ist der link zum Blogpost: 

  • Erfordert .Net3.5 und MS Excel 2007.
  • Behebt xlsx- oder xlsm-Dateien. 
  • Der Beitrag enthält eine Readme-Datei für die App.

Es besteht keine Notwendigkeit, das Risiko einer weiteren Beschädigung Ihrer Datei mit Open Office einzugehen, wie dies in anderen Foren vorgeschlagen wird

6
XLGeek

Ich hatte dieses Problem und fand den einfachsten Weg, um zu klären, dass es dieses Excel-Add in verwendet. Es scheint die "offizielle" Antwort von der Microsoft-Seite auf das Problem zu sein .

Für Leute, die genauso verwirrt sind wie ich .xlam-Dateien verwendet haben, tun Sie dies nach dem Herunterladen in Excel: 

  1. Klicken Sie auf Datei <Optionen <Add-Ins.
  2. Klicken Sie unter Verwalten auf Start.
  3. Klicken Sie im Fenster Add-Ins auf Durchsuchen, navigieren Sie zum Speicherort der XLAM-Datei, markieren Sie sie und klicken Sie auf OK.
  4. Aktivieren Sie das neue Add-In im Fenster Add-Ins und klicken Sie auf OK.
  5. In der Multifunktionsleiste Ihres Startbildschirms sollte sich jetzt ein Abschnitt zum Entfernen von Stilen befinden, der aus einer Schaltfläche besteht, die die Anzahl der Stile in der Arbeitsmappe anzeigt (wahrscheinlich Tausende, falls dieses Problem auftritt).
  6. Klicken Sie auf die Schaltfläche in der Multifunktionsleiste, um alle doppelten Formate zu entfernen.

Wenn Sie es nicht sehen, überprüfen Sie, ob es auf der Multifunktionsleiste richtig angezeigt wird. Klicken Sie mit der rechten Maustaste auf das Menüband und sagen Sie "Ribbon anpassen". Klicken Sie dann auf Add-Ins. Unter Active Application Add-Ins sollte "Extra Styles entfernen" angezeigt werden.

2
Alex S

Die Fehler, die zu der Fehlermeldung "Zu viele Zellenformate" führen, wurden in Excel 2007+ behoben: http://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for-Excel -2007-custom-styles-duplication/ Beachten Sie, dass durch die Fehlerbehebungen bereits vorhandene Stile im Zusammenhang mit der Dateibeschädigung nicht entfernt werden. Open XML-basierte Tools (kostenlos erhältlich) sind die einzige Option, mit der Elemente entfernt werden können, auf die die auf Excel-Objektmodellen basierenden Tools nicht zugänglich sind: z. B. fehlerhafte Stile, die sich als eingebaute verborgene Stile usw. verbergen. Open XML-basierte Bereinigungsmittel 100% stile-bezogene beschädigungsfreie Dateien.

2
XLGeek

Eine Lösung kann die Verwendung von ASAP-Dienstprogrammen sein. Im Blattbereich gibt es die Option remove all unused styles. Sie müssen dann die Arbeitsmappe schließen und wieder öffnen, denke ich.

1
Barbara Wiseman

Dies löscht alle Stile, AUSSER für die Standardstile (normal, erklärend, 20% Accent1 usw.). Dazu gehören vom Benutzer erstellte Stile, die jedoch eine schnelle und schmutzige Methode zum Bereinigen einer Arbeitsmappe sind:


Sub NewNukeStyles()
Dim tempstyle As Style

For Each tempstyle In ActiveWorkbook.Styles

 If tempstyle.BuiltIn = False Then
    If tempstyle.Locked = True Then 'not sure what this is
       tempstyle.Delete
    End If
End If

Next tempstyle

End Sub 'NukeStyles

Ich würde gerne wissen, worauf sich die tempstyle.locked -Eigenschaft tatsächlich bezieht und nicht auf "einen booleschen Wert, der angibt, ob das Objekt gesperrt ist".

1
LeasMaps

SpreadsheetGear für .NET wird nicht eindeutige Formate zusammenstellen, die in Ihrer Situation hilfreich sein können. 

Sie können die kostenlose Testversion herunterladen hier , wenn Sie sehen möchten, ob sie hilft. Laden Sie einfach die Arbeitsmappe in die Anwendung "SpreadsheetGear 2009 für Windows", die mit der Auswertesoftware installiert wird, und speichern Sie die Arbeitsmappe.

Wenn Sie tatsächlich über so viele unterschiedliche Formate verfügen, müssen Sie dies vereinfachen. Jede eindeutige Kombination aus Schriftart-/Zellenfarbe (Innenraum), Zahlenformat, horizontaler und vertikaler Ausrichtung, Rahmen, Einrückungsebene und wahrscheinlich einigen Dingen, an die ich nicht denke, führt zu einem eindeutigen Eintrag in der Tabelle.

Eine weitere Option ist der Wechsel zu Excel 2007, bei dem die Grenze für eindeutige Zellenformate von 4.000 auf 64 KB erhöht wurde.

Haftungsausschluss: Ich besitze SpreadsheetGear LLC

1
Joe Erickson

Ich habe dieses Problem schon einmal gesehen. Es ist möglich, neu zu erstellen, um zu beweisen, was ich sagen kann. Es ist ein bisschen ein Haken 22, aber wenn Sie ein Blatt mit dem Problem "Zu viele Formate" haben, öffnen Sie ein brandneues Blatt, kopieren Sie eine Zelle aus dem zu vielen Formatblatt und fügen Sie sie einfach in die neue Arbeitsmappe ein. Diese Arbeitsmappe wird jetzt sozusagen als "infiziert" eingestuft und weist zu viele Formatfehler auf. Es scheint, dass viele Formatdaten mit dieser Einfügung übergehen, es sei denn, Sie verwenden ein Einfügungsspezial, um sie einzuschränken.

Wie macht man die Dinge besser? Eine Problemumgehung ist die Verwendung der Funktion "Als HTML speichern". Tragen Sie mit, obwohl dies funktioniert. Ich spreche hier von 2003, ich weiß nicht, was 2007 passiert, vielleicht wurde dieser Fehler behoben. Also ... Als HTML speichern, dann Excel schließen. Laden Sie eine neue Sitzung und laden Sie diese, indem Sie sicherstellen, dass Sie nicht - Makros ausführen und dann als Tabellenkalkulation speichern.

Wenn Sie diese neue Tabelle schließen und wieder öffnen, sollten Ihre Too Many Formats-Probleme nicht mehr bestehen. 

Wenn Sie die Datei öffnen können, versuchen Sie> Bearbeiten> Löschen> Formate.

Markieren Sie das Blatt, bevor Sie die Formate treffen, die für mich funktioniert haben.

stellen Sie sicher, dass Sie eine Kopie der Excel-Datei erstellen, bevor Sie dies tun, nur wenn etwas fehlt, können Sie mit dem alten Dokument verweisen.

0
Zach Shaw