VBA 在 Word 2013 中出现 TableOfContents 对象问题

VBA in Word 2013 with TableOfContents Object issue

在我编辑了一堆内容后,我正在尝试更新我的一个宏中的 Table 目录。不过,我 运行 遇到了一个奇怪的问题。下面是我 运行ning.

的片段

注意:user_document 被全局声明为一个 Document 对象。可以在这个函数中访问。

Private Sub RunBuild_Click()
    Dim TOC As TableOfContents
    With user_document
        For Each TOC In .TableOfContents  'ERROR OCCURS HERE
            TOC.Update
        Next
    End With
    user_document.Save
End Sub

当我 运行 这个时,我得到一个对象不支持这个 属性 或方法错误。我似乎无法弄清楚为什么我无法通过循环访问本文档中的 TableOfContents 对象。 For Each 块应该枚举对象集合,以便我可以循环它们,但它的行为就像这个概念不存在一样。我看过其他更新所有 Table 目录的帖子,这些帖子使用了这种确切类型的循环并且没有任何问题。

如果我使用线路

user_document.TableOfContents(1).Update

命令 运行 完全没问题。但是,这不允许我捕捉到不存在目录或存在多个目录的情况,它只会更新第一个实例。

有什么想法吗?我很难过。我一直在重写循环并尝试不同的方法来访问对象,但它们都抛出相同的错误。

Edit1: 我的错。如果你这样写,你的代码应该可以工作:

Dim TOC as TableOfContents ' without s on Table

With user_document
    For Each TOC In .TablesOfContents ' with s on Table
        TOC.Update
    Next
End With

但下面应该也能正常工作。

Dim i As Long

With user_document
    For i = .TablesOfContents.Count To 1 Step -1
        .TablesOfContents(i).Update
    Next 
End With

这是假设 user_document 是正确设置的文档对象。

我想通了。

我声明的 TOC 对象是 "TableOfContents" 类型,但文档对象包含一个 TablesOfContents 对象,其中包含单独的 TableOfContents 对象。

以下代码正确地遍历了结构。

Private Sub RunBuild_Click()
    Dim TOC As TableOfContents

    With user_document
        For Each TOC In .TablesOfContents
            TOC.Update
        Next
    End With

    user_document.Save
End Sub

这也解释了为什么我没有得到更有意义的错误而遇到麻烦 - 我错误地访问了有效对象而不是正确访问了无效对象。由于 word 并没有大惊小怪对象无效,我什至没有想过检查对象的 singular/plural 命名。