我在编辑一堆内容后尝试在我的一个宏中更新我的目录。我遇到了一个奇怪的问题。下面是我正在运行的代码段。
注意: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存在或多个存在的情况,它只会更新第一个实例。
有什么想法吗?我很难过。我一直在重写循环并尝试不同的方式来访问对象,但它们都会抛出相同的错误。
答案 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
是正确设置的文档对象。