2

我想使用 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

我从文件菜单 > 信息 > 高级属性 > 自定义选项卡创建我的单词字段。

那么,当我们要更新其内容时,如何引用该字段的名称呢?

4

3 回答 3

2

这些是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
于 2020-01-09T13:51:08.700 回答
1

在 VBE 中,对象浏览器是找出可能性的好方法。当我找到Word>Field并单击它时,我会看到 Field 成员的列表。名称不在该列表中。这意味着字段对象没有 Name 属性。这就是你得到错误的原因。

你可以解决这个问题。一种方法是围绕相关字段创建书签。然后在代码中,按名称查找书签,然后按书签范围内的索引查找字段。

于 2020-01-08T20:19:27.923 回答
0

按字段名称将文本设置为字段的示例:

ThisDocument.FormFields.Item("MyField1").Result = "hello"
于 2021-09-29T14:21:47.723 回答