2

我想在 Microsoft Word 2007 中定义一个宏,该宏在按下热键时插入具有提供的自动样式的目录。我成功定义了一个宏来插入一个非样式(例如基本)目录,如下所示:

Sub InsertTableOfContents()
'
' InsertTableOfContents Macro
'
'
    With ActiveDocument
        .TablesOfContents.Add Range:=Selection.Range, RightAlignPageNumbers:= _
            True, UseHeadingStyles:=True, UpperHeadingLevel:=1, _
            LowerHeadingLevel:=3, IncludePageNumbers:=True, AddedStyles:="", _
            UseHyperlinks:=True, HidePageNumbersInWeb:=True, UseOutlineLevels:= _
            True
        .TablesOfContents(1).TabLeader = wdTabLeaderDots
        .TablesOfContents.Format = wdIndexIndent
    End With
End Sub

但是,当我尝试插入样式如下的目录时:

Sub InsertStyledTOC()
'
' Macro to insert a table of contents styled like Automatic Table 2
'
ActiveDocument.AttachedTemplate.BuildingBlockEntries("Automatic Table 2"). _
    Insert Where:=Selection.Range, RichText:=True
End Sub

我收到以下错误:

运行时错误 5941 请求的集合成员不存在

我相信这表明BuildingBlockEntries(例如自动表2)的引用成员不存在,但我不清楚为什么或如何更正它。

感谢您的帮助

编辑- 我尝试按照建议使用应用程序默认构建块模板的文件路径:

Application.Templates("C:\Program Files\Microsoft Office\Office12\Document Parts\1033\Building Blocks.dotx").BuildingBlockEntries("Automatic Table 2").Insert Where:=Selection.Range _ , RichText:=True

但是,我仍然收到错误:Run-time error 5941 The requested member of the collection does not exist

4

1 回答 1

1

您的代码期望在附加的模板中找到构建块,如果您没有做任何特别的事情,它可能是 Normal.dotm。Microsoft 实际上将内置构建块存储在不同的模板中。如果你录制一个宏,你会看到这个模板的位置(我的在“C:\Users\owner\AppData\Roaming\Microsoft\Document Building Blocks\1033\14\Built-In Building Blocks.dotx”) .

所以,你有两个选择。您可以使用 Templates 集合访问该模板并从那里插入构建块(宏记录器是您的朋友)。或者,您可以将构建块保存到 Normal.dotm 以便更轻松地访问它。为此,请单击插入 > 快速文本 > 积木,在列表中找到您的积木,编辑其属性,然后将其保存为普通。如果你这样做,你的代码应该可以工作(我有 2010,但我打赌这非常相似)。

我不知道这两个选项之间有什么真正的区别,假设这只是给你的,而不是你需要分发的东西。

编辑添加我从宏记录器获得的代码:

    Application.Templates( _
    "C:\Users\owner\AppData\Roaming\Microsoft\Document Building Blocks\1033\14\Built-In Building Blocks.dotx" _
    ).BuildingBlockEntries("Automatic Table 2").Insert Where:=Selection.Range _
    , RichText:=True

因此,您应该尝试用它替换 InsertStyledTOC 中的代码。

于 2013-02-28T22:59:42.397 回答