如何检查Microsoft Word中是否存在样式?

时间:2018-02-19 10:10:44

标签: vb.net vsto word

如果样式不在样式列表中,我无法得到否定答案

实施例

If Styles("FirstLine").BuiltIn = False Then

    Application.ActiveDocument.Styles.Add(Name:="FirstLine", Type:=wdStyleTypeParagraph)
    Application.ActiveDocument.Styles("FirstLine").AutomaticallyUpdate = False

    With Application.ActiveDocument.Styles("FirstLine").Frame
        .TextWrap = True
        .HorizontalPosition = wdFrameRight 
        .HorizontalDistanceFromText = 4
        .LockAnchor = False
    End With
End If

他回答了答案:

  

System.Runtime.InteropServices.COMException:'请求的成员   该集合不存在。'

如何得到否定答案?

1 个答案:

答案 0 :(得分:0)

这是VB.NET和VBA中的解决方案,用于在添加样式之前检查Word中是否存在样式。

VB.NET

Public Sub AddNewStyle(ByVal styleName As String)
    Try
        '---------------------------------------------------------------------------------------------------
        ' Purpose:  Create a new style in Microsoft Word
        ' Example:  AddNewStyle("YourNewStyleNameHere")
        '           AddNewStyle("Medium Grid 3 - Accent 4") 'a default style from Microsoft Word 2016
        '---------------------------------------------------------------------------------------------------
        Dim MyDocument As Word.Document = Globals.ThisAddIn.Application.ActiveDocument
        Dim styleExist As Boolean = False

        Dim style As Word.Style
        For Each style In Globals.ThisAddIn.Application.ActiveDocument.Styles
            If styleName = style.NameLocal Then
                styleExist = True
                Exit For
            End If
        Next style

        If Not styleExist Then
            Dim MyStyle As Word.Style = MyDocument.Styles.Add(styleName, Word.WdStyleType.wdStyleTypeParagraph)
            MyDocument.Styles(styleName).AutomaticallyUpdate = False

            With MyDocument.Styles(styleName).Frame
                .TextWrap = True
                .HorizontalPosition = Word.WdFramePosition.wdFrameRight
                .HorizontalDistanceFromText = 4
                .LockAnchor = False
            End With

        End If

    Catch ex As Exception
        MsgBox("Contact your system administrator." + Environment.NewLine + "Description: " + ex.ToString(), vbOK + vbExclamation, "Unexpected Error")

    End Try

End Sub

VBA

Public Sub AddNewStyle(ByVal styleName As String)
'---------------------------------------------------------------------------------------------------
' Purpose:  Create a new style in Microsoft Word
' Example:  AddNewStyle "YourNewStyleNameHere"
'           AddNewStyle "Medium Grid 3 - Accent 4" 'a default style from Microsoft Word 2016
'---------------------------------------------------------------------------------------------------
Dim MyStyle As Word.Style
Dim msg As String

    On Error Resume Next
    Set MyStyle = ActiveDocument.Styles(styleName)

    On Error GoTo ErrTrap
    If Not MyStyle Is Nothing Then
        Set MyStyle = Application.ActiveDocument.Styles.Add(styleName, wdStyleTypeParagraph)
        Application.ActiveDocument.Styles(styleName).AutomaticallyUpdate = False

        With Application.ActiveDocument.Styles(styleName).Frame
            .TextWrap = True
            .HorizontalPosition = wdFrameRight
            .HorizontalDistanceFromText = 4
            .LockAnchor = False
        End With

    End If

ExitProcedure:
    On Error Resume Next
    Set MyStyle = Nothing
    Exit Sub

ErrTrap:
    Select Case Err.Number
        Case Is <> 0
            msg = "Contact your system administrator."
            msg = msg & vbCrLf & "Procedure: AddNewStyle"
            msg = msg & IIf(Line = 0, "", vbCrLf & "Error Line: " & Erl)
            msg = msg & vbCrLf & "Error #: " & Err.Number
            msg = msg & vbCrLf & "Error Description: " & Err.Description
            MsgBox msg, vbCritical, "Unexpected Error"
            Resume ExitProcedure
        Case Else
            Resume ExitProcedure
    End Select

End Sub