Vba 如何在输入表单字段文本框时更改该文本框的文本

Vba 如何在输入表单字段文本框时更改该文本框的文本,vba,ms-word,Vba,Ms Word,我试图在表单字段文本框输入时更改其文本。我选择在条目上运行宏,但似乎无法使用该宏动态更改所有字段的宏。有数百个字段是动态删除和添加的,因此为每个字段设置书签并不是本问题答案中指定的选项 是否有任何方法可以在输入时访问表单字段,以便他们输入时我可以更改它 我曾尝试通过书签更改它,但同样,这不是我的选项: ActiveDocument.FormFields(Selection.Bookmarks(1).Name).Result = "my value" 我已经尝试了Selection.FormFi

我试图在表单字段文本框输入时更改其文本。我选择在条目上运行宏,但似乎无法使用该宏动态更改所有字段的宏。有数百个字段是动态删除和添加的,因此为每个字段设置书签并不是本问题答案中指定的选项

是否有任何方法可以在输入时访问表单字段,以便他们输入时我可以更改它

我曾尝试通过书签更改它,但同样,这不是我的选项:

ActiveDocument.FormFields(Selection.Bookmarks(1).Name).Result = "my value"
我已经尝试了Selection.FormFields(1)…等,但它不允许我在输入时访问它。还有别的办法吗


我想访问条目上的表单字段以更改值,但不知道如何操作

默认情况下,每个表单字段都有一个书签和一个名称。在插入表单字段时,它们由Word生成,文本字段的名称遵循模式Text1、Text2等

当触发“On Enter”宏时,
Selection
不会返回表单字段,但会返回书签。通过它,可以获取书签名称,并从中访问表单字段。因此:

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

谢谢你的回复!当我没有设置书签时,我收到一条“请求的集合成员不存在”错误消息。你知道为什么会这样吗?或者在你上面提到的检查是否有书签的情况下,它只是跳过if语句。我如何让它读取默认书签?是否有可能已从表单字段/文档中删除默认名称?也许您首先需要构建一个“循环”宏,该宏遍历文本输入类型的表单字段并为它们指定名称(只需使用带有一些文本的计数器即可)@jakewest我想我必须采用这种方法。谢谢你的帮助!“我已经添加了关于如何添加到这个的信息和代码,@JakeWest。”