vba - 使用 Word VBA 插入构建基块
问题描述
我正在尝试插入一个格式化表格,该表格已保存在名为“DV Table”的单词中,作为使用 VBA 的构建块的一部分。我需要将此表插入到 word 文档的第 13 段。下面是我的代码。前 3 行只是将选择设置为第 12 段,然后创建一个新的段落 (13)。最后一行代码是插入表格。但是当我运行它时,它给出了错误。
编译错误:未定义子或函数
我想这不是定义位置的正确方法。在这方面需要一些帮助。谢谢。
ActiveDocument.Paragraphs(12).Range.Select
Selection.EndKey Unit:=wdLine
Selection.Paragraphs.Add
ActiveDocument.AttachedTemplate.BuildingBlockEntries("DV Table" _
).Insert Where:=Paragraphs(13).Range.Select, RichText:=True
解决方案
该Where
参数需要一个Range
对象。有两个问题Paragraphs(13).Range.Select
- 它是一个方法——它是一个动作,选择一些东西,而不是返回一个对象
Paragraphs(13)
不是“完全合格的” - VBA 不知道它是什么/是什么意思。
一种可能性是
ActiveDocument.Paragraphs(13).Range
注意ActiveDocument.
前面Paragraphs
:这“完全合格” Paragraphs(13)
- 它告诉 VBA 它属于什么。而且,因为Where
需要一个Range
对象,所以Paragraphs(13).Range
应该是一个正确的“目标”(我没有测试你的代码)。
通常,最好不要使用Selection
,而只使用Range
对象。通常不需要使用 VBA实际选择某些内容。问题中代码片段的替代方法可能是
Dim rng As Word.Range
Set rng = ActiveDocument.Paragraphs(13).Range
rng.Collapse wdCollapseEnd 'like pressing right-arrow for a selection
rng.InsertParagraphAfter
rng.Collapse wdCollapseStart ' like pressing left-arrow for a selection
'rng.Select ' for testing / demo purposes
ActiveDocument.AttachedTemplate.BuildingBlockEntries("DV Table" _
).Insert Where:=rng, RichText:=True
在这种情况下,文档中的选择不会改变。没有屏幕闪烁;并且代码执行得更快。这种工作方式需要习惯,但是一旦熟悉它,就更容易识别代码应该做什么......Selection
对于正在操作的内容相当模糊,特别是如果有很多代码使用它.
推荐阅读
- php - 如果在php中满足条件,则在foreach循环中将数组对象添加到数组中
- python - 如何在单列中减去单行中的各种日期
- c++ - 函数模板内的参数推导
- ios - SwiftUI 是基于 UIKit 的吗?
- rollup - 有没有办法从 Rollup 的输出中删除一行?
- ajax - 在不重新加载页面的情况下更新 SQL Alchemy 列表?
- .net - 本地添加的 WCF Web 服务 WSDL,在该参考合同中找不到默认端点元素
- database - 实现redis排行榜
- apache - Forbidden You don't have permission to access this resource 保存带有嵌入式 pdf 的网页时出现错误
- sql - 如何使这个 2 步查询解决方案更好