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

cme*_*ell 4 excel vba excel-vba

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

colParentB还应包含新的实例,colChild即`colParentA中的副本.

我不能这样做吗?

set colParentB = colParentA

colParentB.Name = "Copy of " & colParentA.Name
Run Code Online (Sandbox Code Playgroud)

因为这只是colParentB指出colParentA并改变了对的属性colParentA吧?

我糊涂了.谢谢你的帮助提前.

Jon*_*ton 7

你的怀疑是正确的 - 所有你指定的都是指针,所以它只是用不同的名称引用对象的同一个实例.

您可能需要在colParent和colChild类上创建Clone函数.这样,colChild.Clone可以执行成员克隆并返回具有相同属性的全新对象,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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

clsContent.Clone:

   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
Run Code Online (Sandbox Code Playgroud)

请原谅任何错误或错别字 - 我没有开发方便,所以我直接写入文本框!