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 命名。
在我编辑了一堆内容后,我正在尝试更新我的一个宏中的 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 命名。