【问题标题】:How to refer to Word Field by name in VBA Code?如何在 VBA 代码中按名称引用 Word 字段?
【发布时间】:2020-01-08 19:26:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: vba ms-word word-field


    【解决方案1】:

    这些是DocProperty 字段。如果您按 Alt+F9,您将看到字段 codes

    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
    

    【讨论】:

    • 太棒了!!我很高兴我之前有一个部分解决方案,来自@John Korchok 的回答,但现在我有一个完整的解决方案,优雅仍然存在 S2。
    • 很高兴它有帮助!如果所有必要的信息从一开始就包含在问题中,约翰很可能也提供了同样的信息。在提问之前始终尝试考虑所有可能相关的事情,答案会更快更准确:-)
    【解决方案2】:

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

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

    【讨论】:

    • 约翰·科尔乔克,感谢您的有用回复!我接受了你的回答并编辑了我的问题,但在那之后我意识到@Cindy Meister 的一个新答案无需添加书签即可解决问题,也无需担心更新字段并将它们恢复为真实值。然后我改变了我接受的答案。
    【解决方案3】:

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

    ThisDocument.FormFields.Item("MyField1").Result = "hello"
    

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 2020-05-19
      • 1970-01-01
      • 2021-12-29
      • 2021-08-13
      • 2023-04-03
      相关资源
      最近更新 更多