首页 > 解决方案 > 如何在输入该文本框时更改表单字段文本框的文本

问题描述

我正在尝试在输入表单字段文本框时更改其文本。我选择在输入时运行宏,但我似乎无法使用该宏为我的所有字段动态更改它。有数百个字段被动态删除和添加,因此为每个字段设置书签不是此问题答案中指定的选项MS Word Document Form - Check Value of Text Form Field on Exit

有什么方法可以在输入时访问表单字段,以便我可以在他们输入时更改它?

我曾尝试通过书签更改它,但这又不是我的选择:

ActiveDocument.FormFields(Selection.Bookmarks(1).Name).Result = "my value"

我已经尝试过 Selection.FormFields(1)...等,但它不允许我在进入时访问它。还有其他方法吗?

我想在输入时访问表单字段以更改值,但不知道该怎么做!

标签: vbams-word

解决方案


默认情况下,每个表单域都有一个书签和一个名称。它们是在插入表单域时由 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

推荐阅读