2017-04-05 27 views
2

我有一個ListView,表示一個Word文檔中的所有FormField,就像一個目錄。如何比較2 FormFields在vba中的參照平等?

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我加入,無論是在對象模型有一定指標,並在列表中選擇正確位置插入它?

  If (dFormField Is field) Then 

是如何比較vba中的對象引用相等性,但它似乎每次都會創建一個新的formfield對象。所以要麼我犯了一個錯誤,要麼我需要一些其他方法來確定它們是否是相同的formfield部分。

我會使用自動生成的書籤文本,但它不能在不具有空文本或複製由於複製和粘貼,不更新書籤名稱的依據。

回答

0

這是我的哈克的解決方案。我將爲答案授予更好的解決方案。

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