在我编辑了一堆东西之后,我试图在我的宏中更新我的目录。不过,我遇到了一个奇怪的问题。下面是我正在运行的片段。
注意: user_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对象。每个块应该枚举对象的集合,这样我就可以循环它们,但是它的作用就好像这个概念不存在一样。我看过其他文章,用于更新使用这种确切类型的循环并且没有问题的所有目录。
如果我用这条线
user_document.TableOfContents(1).Update命令运行得很好。但是,这不允许我捕捉到不存在TOC的情况,或者当存在多个TOC时,它只更新第一个实例。
有什么想法吗?我很困惑。我不断重写循环,尝试不同的方式访问对象,但它们都抛出了相同的错误。
发布于 2015-04-09 14:51:00
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是正确设置的文档对象。
发布于 2015-04-09 15:06:42
我已经想明白了。
我声明的TOC对象类型为" TableOfContents ",但是Document对象包含一个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并不担心对象无效,所以我甚至没有想到检查对象的单数/复数命名。
https://stackoverflow.com/questions/29541661
复制相似问题