vba - 如何在输入该文本框时更改表单字段文本框的文本
问题描述
我正在尝试在输入表单字段文本框时更改其文本。我选择在输入时运行宏,但我似乎无法使用该宏为我的所有字段动态更改它。有数百个字段被动态删除和添加,因此为每个字段设置书签不是此问题答案中指定的选项MS Word Document Form - Check Value of Text Form Field on Exit
有什么方法可以在输入时访问表单字段,以便我可以在他们输入时更改它?
我曾尝试通过书签更改它,但这又不是我的选择:
ActiveDocument.FormFields(Selection.Bookmarks(1).Name).Result = "my value"
我已经尝试过 Selection.FormFields(1)...等,但它不允许我在进入时访问它。还有其他方法吗?
我想在输入时访问表单字段以更改值,但不知道该怎么做!
解决方案
默认情况下,每个表单域都有一个书签和一个名称。它们是在插入表单域时由 Word 生成的,并且文本域的名称遵循 Text1、Text2 等模式。
虽然Selection
在触发“On Enter”宏时不会返回表单字段,但它会返回书签。通过它,可以获得书签名称并从那里访问表单字段。所以:
Sub WriteValueToFormFieldOnEnter()
Dim bkm As Word.Bookmark
Dim ffldName As String, ffld As Word.FormField
If Selection.Bookmarks.Count > 0 Then
Set bkm = Selection.Bookmarks(1)
ffldName = bkm.Name
Set ffld = ActiveDocument.FormFields(ffldName)
ffld.result = "New"
End If
End Sub
注意:如果表单字段没有书签名称,因为它们被复制/粘贴在同一个文档中,则必须将名称分配给表单字段。(书签名称在文档中必须是唯一的,这就是发生这种情况的原因。)以下代码循环文档中的表单域并为没有名称的表单域分配名称。
而FormField.Name
各州的语言参考
返回一个字符串,表示指定表单字段的结果。读/写。
写入此属性会导致错误(至少在 Word 2010 和更高版本中,也许在旧版本中也是如此)。因此有必要使用 Word UI 的表单域属性对话框。
Sub NameUnnamedFormFields()
Dim ffld As Word.FormField
Dim rng As Word.Range
Dim tbCounter As Long, cbCounter As Long, ddCounter As Long
tbCounter = 1: cbCounter = 1: ddCounter = 1
For Each ffld In ActiveDocument.FormFields
If Len(ffld.Name) = 0 Then
ffld.Select
With Application.Dialogs(wdDialogFormFieldOptions)
Select Case ffld.Type
Case wdFieldFormTextInput
.Name = "myText" & CStr(tbCounter)
tbCounter = tbCounter + 1
Case wdFieldFormCheckBox
.Name = "myCheckBox" & CStr(cbCounter)
cbCounter = cbCounter + 1
Case wdFieldFormDropDown
.Name = "myDropDown" & CStr(ddCounter)
ddCounter = ddCounter + 1
Case Else
MsgBox "Unknown form field type."
End Select
.Execute
End With
End If
Next
End Sub