vba - 如何在 VBA 代码中按名称引用 Word 字段?
问题描述
我想使用 VBA 更新单词字段内容。我已经有一个可以工作的代码,但是我必须引用字段的索引而不是字段的名称,我更喜欢这样。
我的代码如下:
Sub UpdateField()
Dim myString As String
myString = "asdf"
ActiveDocument.Fields(1).Result.Text = myString
End Sub
假设该字段的名称是 MyField1。以下代码将不起作用(我得到运行时错误'13':类型不匹配'。
Sub UpdateField()
Dim myString As String
myString = "asdf"
ActiveDocument.Fields("MyField1").Result.Text = myString
End Sub
我从文件菜单 > 信息 > 高级属性 > 自定义选项卡创建我的单词字段。
那么,当我们要更新其内容时,如何引用该字段的名称呢?
解决方案
这些是DocProperty
字段。如果按 Alt+F9,您将看到域代码。
字段引用(DocProperty
链接到)文档属性。文档属性具有名称,但这不会“命名”该字段。也不能直接更新字段,DocProperty
因为它链接到文档属性。可以使它暂时显示其他内容,但是在更新字段时这将丢失。
为了更新一个DocProperty
字段,有必要更新底层的文档属性。例如
Sub EditDocPropUpdateDocPropertyField()
Dim doc As Word.Document
Dim prop As Office.DocumentProperty
Dim propName As String
Dim newPropValue As String
Set doc = ActiveDocument
propName = "MyField"
newPropValue = "new value"
Set prop = doc.CustomDocumentProperties(propName)
prop.value = newPropValue
doc.Fields.Update
End Sub
推荐阅读
- ethereum - 在这个 OpenZeppelin ERC20 实现中声明一个额外的局部变量的目的是什么?
- wordpress - 已解决:Wordpress API Post 请求未更新
- json - 为什么验证器报告 JSON 错误?
- rust - 为什么即使它实现了 IntoIterator,对于泛型类型的引用,我也会收到错误“特征 `Iterator` 未实现”?
- api - 是否可以从 Google Analytics API 中提取源/媒体和日期时间?
- sql-server - 是否可以在kali linux中使用所有终端工具安装mssql
- java - 构建失败并出现异常。原因:IllegalArgumentException,消息:不支持的类文件主要版本 57
- bash - MingW 上的自动额外命令
- python - 在 Sublime Text 3 中执行 Python 代码的问题
- html - 高度:100vh;超出窗口高度,即使 max-height 设置为 100%