vba - 在形状中查找 TOC(即文本框)
问题描述
我正在尝试编写一个宏来计算和定位文档中的 TOC(例行检查而不是特定文件)。
位于文档“正文”中的 TOC 很容易访问(通过 VBA)。Word 还允许用户将 TOC 对象放置在形状(文本框)内,但这些似乎无法通过代码访问。诚然,将 TOC 放置在形状中并不常见,但如果可能的话 - 应该考虑到这一点。
这使得计数和检测它们不可靠。
我知道并直观地想到的唯一方法是:
For Each shp In ActiveDocument.Shapes
iCount = iCount + shp.TextFrame.TextRange.<TableOfContents.Count> <<< no access to TableOfContents
Next shp
为了找到这些目录,我需要什么代码?
谢谢!
解决方案
该TablesOfContents
集合仅在Document
对象上可用。文档主体中的目录将选择文本框中的项目;文本框中的目录将选取文档主体中的项目。(至少,自 Word 2010 以来;曾经有一段时间,文本框中的 TOC 对主文档正文中的 TOC 字段不“可见”。)
但是,VBA 属性Document.TablesOfContents
不会拾取文本框中的目录,而只会拾取主体中的目录。
因此,无法直接查询文本框(或自选图形 - 绘图对象)中的 TOC 数量。那就是说...
目录由 Word 使用TOC
域代码在后台管理。因此可以确定给定的 TOC 字段的数量Range
。例如:
Sub GetAllToc()
Dim shp As Word.Shape
Dim tbRange As Range
Dim iCount As Long
Dim fld As Word.Field
Debug.Print "TOCs in main Document body: " & ActiveDocument.TablesOfContents.Count
For Each shp In ActiveDocument.Shapes
If shp.Type = msoTextBox Or shp.Type = msoAutoShape Then
Set tbRange = shp.TextFrame.TextRange
For Each fld In tbRange.Fields
If fld.Type = wdFieldTOC Then
iCount = iCount + 1
End If
Next
End If
Next shp
Debug.Print "TOCs in text boxes: " & iCount
End Sub
推荐阅读
- shell - Exiftool:将元数据从文本文件批量写入 JPEG
- python - 合并具有不同标题的 CSV 文件
- flutter - Flutter:升级后构建ndk版本不匹配
- salesforce - 是否可以使用控制器而不是管道在 Saleforce 中为“Marchant Tools”创建 BM 集成插件?
- reactjs - 如何执行端到端登录流程并测试更多页面
- angular - 导航后不调用 Ionic 4 ngOnInit
- javascript - 在 Cropie 中获取裁剪图像的坐标
- xslt - FO:XSL 顶点数字上标字母
- python - 如何将我从同一个 html 表单收到的每个输入保存到列表中?
- eclipse - 在 Eclipse 中将 Windows 文件作为参数传递