2

我的字典有问题。如果我将一个对象添加到字典中,它会用添加的项目覆盖整个包含项目。

添加所有元素后,字典包含正确数量的项目,但这些项目都是最后添加的项目。

For Each shp In pg.Shapes

    Dim tmp As New cls_dtyp_link
    //Filling tmp with Variables - not Displayed - tmp.link_obj is the Key

    If link_dic.Exists(tmp.link_obj) Then
        Debug.Print "not added:" & tmp.link_obj
    Else
        link_dic.Add tmp.link_obj, tmp

    End If
Next

cls_dtyp_link 类:

Public link_ne As String
Public link_obj As String
Public link_ref As Visio.Shape
Public obj_left As String
Public obj_right As String
Public ref_left As Visio.Shape
Public ref_right As Visio.Shape
Public basekey_left As String
Public basekey_right As String
Public root_site_ne_left As String
Public root_site_ne_right As String
Public root_obj_left As String
Public root_obj_right As String
Public ref_root_left As Visio.Shape
Public ref_root_right As Visio.Shape
Public hops As Integer
Public geht_zu_konzentrator As Boolean

谢谢您的帮助!

4

1 回答 1

3

问题来自Dim tmp As New cls_dtyp_link声明:它所做的是添加对现有cls_dtyp_link对象的引用,它不会像您期望的那样实例化一个新对象。如果要创建一个新对象,请在循环结束时明确终止现有对象:Set cls_dtyp_link = Nothing. 然后每次重新进入循环时都会创建一个新实例。

通常,一次性声明和实例化在 VBA 中被认为是不好的做法,因为您遇到了类似的问题。我建议Dim在循环外对对象进行-ing,并Set在循环内对其进行-ting。

另外,请看这里: VBA:声明新对象的两种方式的区别?(试图理解为什么我的解决方案有效)

我希望这会有所帮助!

于 2013-08-20T10:41:20.383 回答