【发布时间】:2018-02-08 16:21:43
【问题描述】:
我正在处理更新现有 Word 文档的 Outlook VBA 宏。 我想用 VBA 代码更新一些现有表单字段的默认值,但我不知道怎么做。
FormFields("fieldName").Result = myNewValue 不起作用:刷新后(Ctrl+A 然后 F9)写入的值被删除。
我知道我可以使用自定义文档属性轻松完成此操作,但使用表单字段代替对我来说更方便。
有什么方法可以更新表单字段的默认值吗?
【问题讨论】:
我正在处理更新现有 Word 文档的 Outlook VBA 宏。 我想用 VBA 代码更新一些现有表单字段的默认值,但我不知道怎么做。
FormFields("fieldName").Result = myNewValue 不起作用:刷新后(Ctrl+A 然后 F9)写入的值被删除。
我知道我可以使用自定义文档属性轻松完成此操作,但使用表单字段代替对我来说更方便。
有什么方法可以更新表单字段的默认值吗?
【问题讨论】:
Result 属性是用户键入的内容,而不是您要查找的内容。
您需要的是 TextInput.Default 属性。然而,这个问题是它不会显示在文档中,直到字段被更新。这意味着如果您的代码还没有这样做,您将不得不取消对表单的保护。
Sub ChangeFormFieldDefault()
Dim doc As word.Document
Dim ffld As word.FormField
Dim rngFFld As word.Range
Dim countFields As Long
Set doc = ActiveDocument
Set ffld = doc.FormFields("Text1")
Set rngFFld = ffld.Range
countFields = doc.Range(doc.content.Start, rngFFld.End).Fields.Count
ffld.TextInput.Default = "default text"
'for the following form field protection must be turned off
doc.Fields(countFields).Update
End Sub
【讨论】:
当您执行 Ctrl+A、F9 时,您的表单域正在丢失结果,这表明您的文档没有“填写”应用形式的保护。在这种情况下,您可以使用:
With ActiveDocument.FormFields(1)
.TextInput.Default = "Hello world"
.Result = .TextInput.Default
End With
或:
With ActiveDocument
.FormFields(1).TextInput.Default = "Hello world"
.Fields.Update
End With
【讨论】: