如下图, 有一个 word 文档, 我想删除它自带的乱七八糟的样式, 手动删除又太麻烦, 想用 vb 来批量删除
vb 代码如下, 执行后并不生效, 请问该如何修改
Sub Reset_All_Styles()
Dim sty as Style
For Each sty In ActiveDocument.Styles
If sty.BuiltIn = False Then sty.Delete
Next sty
End Sub
如下图, 有一个 word 文档, 我想删除它自带的乱七八糟的样式, 手动删除又太麻烦, 想用 vb 来批量删除
vb 代码如下, 执行后并不生效, 请问该如何修改
Sub Reset_All_Styles()
Dim sty as Style
For Each sty In ActiveDocument.Styles
If sty.BuiltIn = False Then sty.Delete
Next sty
End Sub
你的VB脚本的问题在于,你试图删除所有非内置的样式,但sty.BuiltIn
属性实际上返回的是样式是否是内置的,而不是样式是否由用户创建。这意味着你的If
语句实际上没有正确地识别出用户创建的样式。
此外,即使sty.BuiltIn
能够正确地识别出用户创建的样式,sty.Delete
也会引发错误,因为Word不允许你直接删除一个正在使用的样式。你需要先确保没有任何文本正在使用这个样式,然后才能删除它。
下面是一个修改后的VB脚本,它会遍历所有的样式,检查是否有文本正在使用这个样式,如果没有,则删除它:
Sub Reset_All_Styles()
Dim sty As Style
Dim i As Integer
' 首先,遍历所有的样式,记录所有用户创建的样式的名字
Dim userStyles As New Collection
For Each sty In ActiveDocument.Styles
If Not sty.BuiltIn Then
userStyles.Add sty.NameLocal, CStr(userStyles.Count) + 1
End If
Next sty
' 然后,再次遍历所有的样式,如果样式在用户创建的样式列表中,并且没有文本正在使用它,就删除它
For i = 1 To userStyles.Count
For Each sty In ActiveDocument.Styles
If sty.NameLocal = userStyles(i) Then
If sty.InUse = False Then
sty.Delete
End If
Exit For
End If
Next sty
Next i
End Sub
这个脚本首先遍历所有的样式,将用户创建的样式的名字添加到一个集合中。然后,它再次遍历所有的样式,如果样式在用户创建的样式列表中,并且没有文本正在使用这个样式,就删除它。
注意,这个脚本只能删除那些在当前文档中没有被使用的样式。如果有文本正在使用某个样式,那么这个样式就不能被删除。如果你想要删除正在使用的样式,你需要首先更改这些样式,或者删除使用这些样式的文本。