如何比较2个FormFields在vba字中的引用相等性?

时间:2017-04-05 02:27:26

标签: vba word-vba

我有一个ListView,它代表word文档中的所有FormFields,如目录。

Function addFields(field As formField)
    Set oApp = GetObject(, "Word.Application")
    oApp.Visible = True
    Set oDoc = oApp.ActiveDocument
    Dim dFormField As formField
    Dim i As Integer
    For i = 1 To oDoc.FormFields().Count
        Set dFormField = oDoc.FormFields(i)
        If (dFormField Is field) Then
            Set Item = NavigatorForm.LBFields.ListItems.Add(i, , i)
            Set Item.tag = dFormField
            Exit For
        End If
    Next
End Function

如何比较FormField I添加是否在对象模型中的某个索引处,并将其插入列表中的正确位置?

            If (dFormField Is field) Then

您是如何比较vba中的对象引用相等性的,但看起来DOM每次都在创建一个新的formfield对象。所以要么我犯了错误,要么我需要一些其他方法来确定它们是否是相同的形式片段。

我会使用自动生成的书签文字,但由于复制和粘贴不能使用空文本或重复项,因此不会更新书签名称。

1 个答案:

答案 0 :(得分:0)

这是我的hacky解决方案。我会给出一个更好的解决方案。

Function addFields(field As formField)
    Dim orig As String
    Dim detect As String
    orig = field.Result
    field.Result = Rnd(100000)
    Set oApp = GetObject(, "Word.Application")
    oApp.Visible = True
    Set oDoc = oApp.ActiveDocument
    Dim dFormField As formField
    Dim i As Integer
    For i = 1 To oDoc.FormFields().Count
        Set dFormField = oDoc.FormFields(i)
        If (dFormField.Result = field.Result) Then
            field.Result = orig
            Set Item = NavigatorForm.LBFields.ListItems.Add(i, , i)
            Set Item.tag = dFormField
            Exit For
        End If
    Next
End Function