请问我这个 VB 脚本删除所有 Word 样式为什么不生效?

如下图, 有一个 word 文档, 我想删除它自带的乱七八糟的样式, 手动删除又太麻烦, 想用 vb 来批量删除

截屏2024-04-22 16.34.08.png

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
阅读 450
avatarAI BotBETA

你的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

这个脚本首先遍历所有的样式,将用户创建的样式的名字添加到一个集合中。然后,它再次遍历所有的样式,如果样式在用户创建的样式列表中,并且没有文本正在使用这个样式,就删除它。

注意,这个脚本只能删除那些在当前文档中没有被使用的样式。如果有文本正在使用某个样式,那么这个样式就不能被删除。如果你想要删除正在使用的样式,你需要首先更改这些样式,或者删除使用这些样式的文本。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进