Löschen Sie ALLE benutzerdefinierten Zellenstile EXCEL

11

Ist es möglich, ALLE benutzerdefinierten / erstellten Zellenstile in einer Arbeitsmappe zu löschen? Belassen Sie einfach die Standardstile.

Ohne sie alle einzeln löschen zu müssen

Geben Sie hier die Bildbeschreibung ein

PeterH
quelle
Sehr einfach mit VBA
Garys Student

Antworten:

16

Probieren Sie dieses kleine VBA-Makro aus:

Sub StyleKiller()
    Dim N As Long, i As Long

    With ActiveWorkbook
        N = .Styles.Count
        For i = N To 1 Step -1
            If Not .Styles(i).BuiltIn Then .Styles(i).Delete
        Next i
    End With
End Sub

Dies behebt das Problem "Builtin vs Custom ". Beachten Sie, dass wir die Schleife rückwärts ausführen , um eine Beschädigung des Schleifenindex zu vermeiden.

Garys Schüler
quelle
Nützliche ,,, ☺
Rajesh S
5

INDEXVersuchen Sie Folgendes, um einfach alle zu entfernen, ohne sie zu verwenden :

Sub StyleKiller()
    Dim st As Style
    On Error Resume Next
    For Each st In ActiveWorkbook.Styles
      If Not st.BuiltIn Then
        st.Delete
      End If
    Next
    On Error GoTo 0
End Sub
Andreas
quelle
danke PeterH für die Bearbeitung :-)
Andreas
danke für die Antwort ! Es ist viel einfacher als meine Version, ich werde es später testen, und wenn es funktioniert, werde ich es als richtige Antwort akzeptieren
PeterH
2

Ok, das war nicht so schwer, wie ich zuerst dachte.

Etwas chaotisch, da ich vba nicht oft benutze; Dieser Code wird jedoch nur auf die Standardstile zurückgesetzt:

Sub DefaultStyles()
   Dim MyBook As Workbook
   Dim tempBook As Workbook
   Dim CurStyle As Style
   Set MyBook = ActiveWorkbook
   On Error Resume Next
   For Each CurStyle In MyBook.Styles
      Select Case CurStyle.Name
         Case "20% - Accent1", "20% - Accent2", _
               "20% - Accent3", "20% - Accent4", "20% - Accent5", "20% - Accent6", _
               "40% - Accent1", "40% - Accent2", "40% - Accent3", "40% - Accent4", _
               "40% - Accent5", "40% - Accent6", "60% - Accent1", "60% - Accent2", _
               "60% - Accent3", "60% - Accent4", "60% - Accent5", "60% - Accent6", _
               "Accent1", "Accent2", "Accent3", "Accent4", "Accent5", "Accent6", _
               "Bad", "Calculation", "Check Cell", "Comma", "Comma [0]", "Currency", _
               "Currency [0]", "Explanatory Text", "Good", "Heading 1", "Heading 2", _
               "Heading 3", "Heading 4", "Input", "Linked Cell", "Neutral", "Normal", _
               "Note", "Output", "Percent", "Title", "Total", "Warning Text"
         Case Else
            CurStyle.Delete
      End Select
   Next CurStyle
   Set tempBook = Workbooks.Add
   Application.DisplayAlerts = False
   MyBook.Styles.Merge Workbook:=tempBook
   Application.DisplayAlerts = True
   tempBook.Close
End Sub
PeterH
quelle
Eigentlich mag ich die Art und Weise, wie Sie eine Schleife durchlaufen, Stylesanstatt meine Schleife über einen Index.
Garys Student
Wird hier Probleme haben, eine Sammlung vorwärts zu löschen.
AJD
@AJD Hallo, danke für deinen Kommentar, welche Probleme könnten dadurch verursacht werden?
PeterH
@PeterH: Das Löschen von Weiterleitungen bedeutet, dass die Elemente in der Sammlung neu nummeriert werden. Zum Beispiel ist in der Schleife j= 1 und dann Sie Delete(1). (2) bewegt sich zu (1), jerhöht sich jedoch zu 2, so dass der nächste Schritt Delete(2)der alte (3) ist. For Eachist eine Aufzählungsschleife, daher wird dieselbe Logik verwendet. Es gab irgendwo eine gute Erklärung für StackOverflow - ich kann sie nicht finden, aber diese erklären auch: stackoverflow.com/questions/18858718/… , stackoverflow.com/questions/45585393/vba-loop-and-delete-issue
AJD
@AJD Danke für die Info, das Makro selbst funktioniert wie vorgesehen, ich habe es auf mehreren Arbeitsmappen verwendet, seit ich es im Februar
PeterH