Word BuiltinStyles 的 LinkedStyle

LinkedStyle for the Word BuiltinStyles

我正在扩展 VSTO 的 Word 报告编写功能,以考虑不同的语言。因此,我没有使用 "Heading 1" 等标题,而是使用了 wdStyleHeading1 等。我构建了一个函数来将样式分配给标题。问题是下面的第 1 行和第 2 行相互覆盖。如果我先调用该函数,我会丢失列表编号,如果我第二个调用函数,我会丢失格式。你能解释一下我哪里出错了吗?

我已经导入了必要的参考资料。

   Call HeadingListLevel(wrdApp, 1)
    wrdApp.Selection.ParagraphFormat.Style = Word.WdBuiltinStyle.wdStyleHeading1

下面是子函数

Sub HeadingListLevel(wrdApp As Object, HeadingLvl As Integer)
    'Dim wrdHeading As String
    Dim wrdHeadingNr As String
    Dim i As Integer
    Dim ListTemp As Word.ListTemplate

    wrdHeadingNr = "%" & 1
    ListTemp = wrdApp.ListGalleries(Word.WdListGalleryType.wdOutlineNumberGallery).ListTemplates(1)

    For i = 1 To HeadingLvl
        If i > 1 Then
            wrdHeadingNr = wrdHeadingNr & "." & "%" & i
        End If
    Next i
    'wrdHeading = "Heading " & HeadingLvl
    With ListTemp.ListLevels(1)
        Select Case HeadingLvl
            Case 1
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading1 
            Case 2
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading2
            Case 3
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading3
            Case 4
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading4
            Case 5
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading5
            Case 6
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading6
            Case 7
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading7
        End Select
        .NumberFormat = wrdHeadingNr
        .NumberStyle = Word.WdListNumberStyle.wdListNumberStyleArabic
    End With

    wrdApp.Selection.Range.ListFormat.ApplyListTemplate(ListTemplate:=ListTemp)

    ListTemp = Nothing
End Sub

我自己找到了答案。以下是对子功能的更改。它对我很有效。

    Sub HeadingListLevel(wrdApp As Object, HeadingLvl As Integer)
    'Dim wrdHeading As String
    Dim wrdHeadingNr As String
    Dim i As Integer
    Dim ListTemp As Word.ListTemplate


    wrdHeadingNr = "%" & 1
    ListTemp = wrdApp.ListGalleries(Word.WdListGalleryType.wdOutlineNumberGallery).ListTemplates(5)

    For i = 1 To HeadingLvl
        If i > 1 Then
            wrdHeadingNr = wrdHeadingNr & "." & "%" & 1
        End If
    Next i
    'wrdHeading = "Heading " & HeadingLvl
    With ListTemp.ListLevels(HeadingLvl)
        Select Case HeadingLvl
            Case 1
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading1).NameLocal
            Case 2
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading2).NameLocal
            Case 3
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading3).NameLocal
            Case 4
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading4).NameLocal
            Case 5
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading5).NameLocal
            Case 6
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading6).NameLocal
            Case 7
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading7).NameLocal
        End Select

        '.LinkedStyle = wrdHeading
        .NumberFormat = wrdHeadingNr
        .NumberStyle = Word.WdListNumberStyle.wdListNumberStyleArabic
        '.StartAt = 1
        '.ResetOnHigher = False
    End With

    wrdApp.Selection.Range.ListFormat.ApplyListTemplate(ListTemplate:=ListTemp)

    ListTemp = Nothing
End Sub