Word 2013中的VBA与TableOfContents对象问题

时间:2015-04-09 14:42:32

标签: vba ms-word word-vba

我在编辑一堆内容后尝试在我的一个宏中更新我的目录。我遇到了一个奇怪的问题。下面是我正在运行的代码段。

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

如果我使用

user_document.TableOfContents(1).Update

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

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

2 个答案:

答案 0 :(得分:1)

我已经明白了。

我声明的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

这也解释了为什么我遇到麻烦而没有得到更有意义的错误 - 我正确地访问了有效对象而不是无效对象。由于单词并没有因为对象无效而烦恼,我甚至没想过要检查对象的单数/复数命名。

答案 1 :(得分:0)

编辑1:我的错。如果您这样写,您的代码应该有效:

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是正确设置的文档对象。