Vba 如何创建自定义对象或集合的副本?

Vba 如何创建自定义对象或集合的副本?,vba,excel,Vba,Excel,我有一个自定义集合,我们称之为colParentA,它包含许多名为colChild的集合。我想创建一个函数来创建一个新集合,colParentB,它具有所有属性,并且包含与colParentA相同的子级。然后,用户可以修改所需的colParentB的少数属性,而不必重新定义与colParentA相同的属性 colParentB还应包含colChild的新实例,这些实例是在“colParentA”中找到的实例的副本 我不能就这么做对吗 set colParentB = colParentA co

我有一个自定义集合,我们称之为
colParentA
,它包含许多名为
colChild
的集合。我想创建一个函数来创建一个新集合,
colParentB
,它具有所有属性,并且包含与
colParentA
相同的子级。然后,用户可以修改所需的
colParentB
的少数属性,而不必重新定义与
colParentA
相同的属性

colParentB
还应包含
colChild
的新实例,这些实例是在“colParentA”中找到的实例的副本

我不能就这么做对吗

set colParentB = colParentA

colParentB.Name = "Copy of " & colParentA.Name
因为这只会使
colParentB
指向
colParentA
,并更改
colParentA
的属性,对吗


我很困惑。提前感谢您的帮助。

您的怀疑是正确的-您所分配的只是指针,因此它只会引用具有不同名称的相同对象实例

您可能需要在colParent和colChild类上创建克隆函数。这样,colChild.Clone就可以进行memberwise克隆,并返回一个具有相同属性的全新对象,colParent可以使用克隆的colChild对象创建一个新集合

但要小心,如果colParent或colChild的任何属性都是对对象的引用,那么可能需要克隆这些属性,以避免您更新无意更新的值

可能的函数是(请注意,我假设colChild包含一个类clsContent的多个实例,这需要更改):

colParent.Clone:

Public Function Clone() as colParent
  'Start a new parent collection
  dim parent as colParent
  set parent = new colParent

  'Populate the new collection with clones of the originals contents
  dim child as colChild
  for each child in Me
    parent.Add(child.Clone)
  next

  set Clone = parent
End Function
   Public Function Clone() as clsContent
      'Start a new parent collection
      dim content as clsContent
      set child = new clsContent

      child.Property1 = me.Property1
      child.Property2 = me.Property2
      ...

      set Clone = content
    End Function
colChild.clone:

Public Function Clone() as colChild
  'Start a new parent collection
  dim child as colChild
  set child = new colChild

  'Populate the new collection with clones of the originals contents
  dim content as clsContent
  for each content in Me
    child.Add(content.Clone)
  next

  set Clone = child
End Function
clsContent.Clone:

Public Function Clone() as colParent
  'Start a new parent collection
  dim parent as colParent
  set parent = new colParent

  'Populate the new collection with clones of the originals contents
  dim child as colChild
  for each child in Me
    parent.Add(child.Clone)
  next

  set Clone = parent
End Function
   Public Function Clone() as clsContent
      'Start a new parent collection
      dim content as clsContent
      set child = new clsContent

      child.Property1 = me.Property1
      child.Property2 = me.Property2
      ...

      set Clone = content
    End Function

请原谅任何错误或打字错误-我手边没有dev env,所以我直接写在文本框中

你能提供som示例代码让我指出正确的方向吗?我是否从colParent.Clone方法中调用colChild.Clone方法?我只是不知道如何创建这些克隆方法。太好了!就像一个符咒,但不是在各自的克隆方法中使本地父级和子级变暗,我只是
Set clone=new colParent