Vba 复制自定义类时出现问题

Vba 复制自定义类时出现问题,vba,class,oop,excel,Vba,Class,Oop,Excel,类似的问题,但我无法找到适合我的解决方案。我有3个相关的自定义类,在将值从一个类的实例复制到另一个实例时遇到问题。我在每个类中创建了Clone方法来专门创建新实例,以避免多个变量仅仅指向同一个对象。这是我的课 类别统计: Public value As Double Public name As String Public flagged As Boolean Public category_name As String Public Function Clone_Stat() As clas

类似的问题,但我无法找到适合我的解决方案。我有3个相关的自定义类,在将值从一个类的实例复制到另一个实例时遇到问题。我在每个类中创建了Clone方法来专门创建新实例,以避免多个变量仅仅指向同一个对象。这是我的课

类别统计:

Public value As Double
Public name As String
Public flagged As Boolean
Public category_name As String

Public Function Clone_Stat() As class_stat
    Dim stat As class_stat
    Set stat = New class_stat
    stat.name = Me.name
    stat.category_name = Me.category_name
    stat.flagged = Me.flagged
    stat.value = Me.value
    Set Clone_Stat = stat
End Function
类别(类别)

Public name As String
Public stats As Collection
Private Sub Class_Initialize()
    Set stats = New Collection 
End Sub

Private Function AddStat(ByRef stat As class_stat)
    stats.Add stat
End Function

Public Function Clone_Cat() As class_category
    Dim cat As class_category
    Set cat = New class_category
    'Copy the cat name
    cat.name = Me.name
    Dim stat As class_stat

    'Copy all the stats
    For Each stat In Me.stats
        cat.stats.Add (stat.Clone_Stat)
    Next stat
    Set Clone_Cat = cat
End Function
类别用户:

Public username As String
Public name As String
Public categories As Collection

Private Sub Class_Initialize()
 Set categories = New Collection
End Sub

Private Function AddCategory(ByRef category As class_category)
    categories.Add category
End Function

Public Function Clone_User() As class_User
    Dim user As class_User
    Set user = New class_User
    Dim cat As class_category

    'Set values
    user.name = Me.name
    user.username = Me.username

    'Copy over the categories
    For Each cat In Me.categories
        user.categories.Add (cat.Clone)
    Next cat
    Set Clone_User = user
End Function
我可以将一个类的一个实例复制到另一个实例,如下所示:

Dim temp_cat As class_category
Set temp_cat = New class_category
Dim temp_cat1 As class_category
Set temp_cat1 = New class_category
temp_cat1.name = "cat name"
Set temp_cat = temp_cat1.Clone_Cat
temp_cat.name = "cat name" 'Resets temp_cat name without affecting temp_cat1
但是,当我将class_stat添加到class_类别并尝试复制时,会抛出一个错误

Dim temp_stat1 As class_stat
Set temp_stat1 = New class_stat
Dim temp_stat As class_stat
Set temp_stat = New class_stat

Dim temp_cat as class_category
Set temp_cat = New class_category
Dim temp_cat1 As class_category
Set temp_cat1 = New class_category

'Clone some stats fine - this works
temp_stat1.name = "stat name"
Set temp_stat = temp_stat1.Clone_Stat
temp_stat1.name = "stat1 name"

'Clone a cat with no stats - works
temp_cat1.name = "cat name"
Set temp_cat = temp_cat1.Clone_Cat
temp_cat1.name = "cat1 name"

'Try and add stats to temp_cat1 and clone and then it fails
Call temp_cat1.stats.Add(temp_stat.Clone_Stat) 'this works

Dim cloned_cat As class_category
Set cloned_cat = New class_category
Set cloned_cat = temp_cat1.Clone_Cat
上面的最后一行抛出“对象不支持此属性或方法错误”。当我逐步完成调试时,它在到达Clone_Stat函数末尾后抛出它。有没有关于我做错了什么的想法?

我运行以下过程:

Sub TestClones()

Dim temp_cat As class_category
Set temp_cat = New class_category
Dim temp_cat1 As class_category
Set temp_cat1 = New class_category
Dim temp_stat1 As class_stat
Set temp_stat1 = New class_stat
Dim temp_stat As class_stat
Set temp_stat = New class_stat
'Clone some stats fine - this works
temp_stat1.name = "stat name"
Set temp_stat = temp_stat1.Clone_Stat
temp_stat1.name = "stat1 name"

'Clone a cat with no stats - works
temp_cat1.name = "cat name"
Set temp_cat = temp_cat1.Clone_Cat
temp_cat1.name = "cat1 name"

'Try and add stats to temp_cat1 and clone and then it fails
Call temp_cat1.stats.Add(temp_stat.Clone_Stat) 'this works

Dim cloned_cat As class_category
Set cloned_cat = New class_category
Set cloned_cat = temp_cat1.Clone_Cat()

End Sub
我犯了和你一样的错误

为什么会出错?

此集合没有默认属性,当您在其周围放置括号时,它正试图计算该表达式,这将引发错误

分辨率

删除此行中的括号:

cat.stats.Add (stat.Clone_Stat)
这样你就可以用这个来代替了

cat.stats.Add stat.Clone_Stat
我还注意到,在您的
Clone\u User
中,您有一个错误——可能是输入错误,但您没有
.Clone
方法,我认为出于同样的原因,应该是这样的:

user.categories.Add cat.Clone_Cat

我在这段代码中没有看到任何会初始化或分配给
temp\u stat
对象的内容。你做到了吗?是的,
temp\u stat
被初始化了,只是不小心把它从我的帖子中删除了。现在添加它。啊vba语法再次让我着迷!这正是我所需要的,甚至还发现了一个我还没有注意到的打字错误。非常感谢。我没有发现打字错误,我使用了Debug | Compile选项:)