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
这解决了“内置”与“自定义”的问题。请注意,我们向后运行循环以避免破坏循环索引。
INDEX:
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
On Error Resume Next和On Error GoTo 0是我个人认为的糟糕编码风格。我猜你可以安全地将它们移除。 - Vince42Sub 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的方式,而不是我自己遍历索引。 - Gary's Studentj 等于 1,然后你执行 Delete(1)。(2)移动到(1),但是 j 增加到 2,所以下一步是 Delete(2),这是旧的(3)。For Each 是一个枚举循环,因此使用相同的逻辑。在 StackOverflow 上有一个很好的解释 - 我找不到它了,但这些链接也解释了这个问题:https://stackoverflow.com/questions/18858718/word-vba-shaperange-delete-unexpected-behavior/18859393#18859393,https://stackoverflow.com/questions/45585393/vba-loop-and-delete-issue - AJDj is = 1,但是在宏中我没有使用这个变量。 - PeterHj,因为这个框里的自动纠正总是把I大写!看一下我评论中放的那些链接,它们有讨论为什么的答案。 - AJD