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。”