Antworten:
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.
INDEX
Versuchen 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
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
Styles
anstatt meine Schleife über einen Index.
j
= 1 und dann Sie Delete(1)
. (2) bewegt sich zu (1), j
erhöht sich jedoch zu 2, so dass der nächste Schritt Delete(2)
der alte (3) ist. For Each
ist 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