VBA Word - 更改重复的文本表单字段名称

时间:2017-09-17 06:59:50

标签: word-vba copy-paste formfield

通过明确尝试使用“文本表单字段”(“开发人员>控件>旧表单”)在任何文档中编写Name属性来获取此错误(MS Office 2013):

Sub EditCopiedFormField()
    Selection.MoveDown Unit:=wdLine, Count:=4, Extend:=wdExtend
    Selection.Copy
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.Paste
    ActiveDocument.FormFields(3).Name = "ID999"
End Sub

enter image description here

enter image description here

ActiveDocument.FormFields(i).Name - Selection.Copy操作后Selection.Paste字段是否可写?

复制并粘贴一些“文本表单字段”后,我通过阅读Name(UI对话框中的“书签”字段)属性没有任何问题,但我无法编写它(可能因为复制后表单字段变为重复),收到标准错误:

Method 'Name' of object 'FormField' failed

例如,在复制包含它们的范围后,我得到了两个“文本表单字段”,具有相同的Name"ID001"。通过双击表单编辑副本,副本的Name(“书签”)即时清除:""

尝试在Name更改之前添加“书签”,并注意到UI中的“链接>书签”菜单没有复制“书签”:

`ActiveDocument.Bookmarks.Add("ID999")` 

不要改变这种情况。

我该怎么做才能更改这些重复名称?

2 个答案:

答案 0 :(得分:1)

我无法复制您遇到的困难并提出以下测试建议。

Private Sub ListFields()

    Dim Fld As FormField
    Dim i As Integer

    With ActiveDocument
        For Each Fld In .FormFields
            i = i + 1
            Debug.Print i, Fld.Name, Fld.Result
        Next Fld
    End With
End Sub

运行此代码会将您的FormField列表打印到VB编辑器的立即窗口,给出索引,名称和结果。通过索引号对要更改其名称的字段进行寻址。您应该可以进行所需的所有更改。

答案 1 :(得分:0)

感谢The Anchorage网站,此代码似乎可以解决问题:

ActiveDocument.FormFields(i).Select
With Dialogs(wdDialogFormFieldOptions)
    .Name = "ID999"
    .Execute
End With