FormField.Add方法不返回对新字段的引用(bug?)

时间:2013-07-18 11:12:53

标签: ms-word word-vba

我正在使用Word 2010创建电子表单,但Add集合的FormField方法中似乎存在错误;我想知道是否有办法绕过它。

在表格中,我有一张表,询问有关工作人员的信息,这可以通过按下按钮添加其他行。代码向表中添加一个新行,然后遍历创建表单字段的新行中的每个单元格。

Private Sub AddStaffRow(t As Table)

    Dim rowNum As Integer
    Dim ff As FormField

    ' Add a new row
    t.Rows.Add
    rowNum = t.Rows.Count

    ' Insert form fields in to the cells
    ' Staff role dropdown
    Set ff = ActiveDocument.FormFields.Add(t.Cell(rowNum, 1).Range, wdFieldFormDropDown)
    ff.Name = "staff_role" & rowNum
    With ff.DropDown.ListEntries
        .Add "Principle Investigator"
        .Add "Sub Investigator"
        .Add "Research Nurse"
        .Add "Practice Nurse"
        .Add "Administrator"            
    End With

    ' Staff name textbox
    Set ff = ActiveDocument.FormFields.Add(t.Cell(rowNum, 2).Range, wdFieldFormTextInput)
    ff.Name = "staff_name" & rowNum

    ' GCP certificate available
    Set ff = ActiveDocument.FormFields.Add(t.Cell(rowNum, 3).Range, wdFieldFormDropDown)
    ff.Name = "staff_gcp" & rowNum
    With ff.DropDown.ListEntries
        .Add "Yes"
        .Add "No"
        .Add "NA"
    End With
End Sub

添加的第一个字段正常工作,创建下拉列表并使用添加的选项命名。但是,当添加下一个字段FormField集合计数增量时,该字段将显示在文档中,但该函数返回的引用是第一个字段(人员角色下拉列表)

documentation states返回值是(应该是)对添加到集合中的FormField对象的引用:

MS-Word VBA documentation snippet

返回的引用不正确,因为代码完成后,第一个下拉字段中添加了最后一个字段的name,看起来像这样

enter image description here

我做错了什么或者是否有解决这个“错误”的方法?

1 个答案:

答案 0 :(得分:2)

不幸的是,在插入FormField之前,您必须确保该范围不包含单元格结束范围标记。

e.g。

Dim r As Word.Range
Set r = t.Cell(rowNum,1).Range
r.SetRange r.Start, r.End-1
Set ff = ActiveDocument.FormFields.Add(r, wdFieldFormDropDown)