Word 2013中的VBA和目录对象问题

Word 2013中的VBA和目录对象问题,vba,ms-word,Vba,Ms Word,在我编辑了一堆东西之后,我正试图在我的一个宏中更新我的目录。不过我遇到了一个奇怪的问题。下面是我正在运行的代码片段 注意:user_文档全局声明为文档对象。在该功能中可以访问它 Private Sub RunBuild_Click() Dim TOC As TableOfContents With user_document For Each TOC In .TableOfContents 'ERROR OCCURS HERE TOC.U

在我编辑了一堆东西之后,我正试图在我的一个宏中更新我的目录。不过我遇到了一个奇怪的问题。下面是我正在运行的代码片段

注意:user_文档全局声明为文档对象。在该功能中可以访问它

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块应该枚举对象集合,这样我就可以循环它们,但它的行为就像这个概念不存在一样。我见过其他帖子更新所有使用这种循环类型的目录,并且没有任何问题

如果我用电话线

user_document.TableOfContents(1).Update
命令运行得非常好。然而,这不允许我捕捉不存在TOC的情况,或者当存在多个TOC时,它只会更新第一个实例


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

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\u document
是一个正确设置的文档对象。

我已经找到了它

我声明的TOC对象是“TableOfContents”类型,但Document对象包含一个TableOfContents对象,其中包含单独的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没有对对象无效大惊小怪,所以我甚至没有想到检查对象的单数/复数命名。

这就是facepalm时刻之一。我刚刚注意到,我一直在自动完成这个该死的对象时遇到问题的原因是,它被称为“TableOfContents”,而不是“TableOfContents”。我现在遇到了一个新错误,但至少它与我的代码有关,而不是与我的方法有关。我会在解决新错误时更新。@nosjojojo哈哈,是的,我也注意到了。编辑了我的代码。我已经习惯了Excel处理父对象和子对象的方式,Word也有一些不同。你的新编辑和我在整理其他错误后得到的几乎一样。我继续并将你的答案标记为答案,并用我的更新代码发布了我自己的答案。谢谢你的帮助!