Vba 复制自定义类时出现问题
类似的问题,但我无法找到适合我的解决方案。我有3个相关的自定义类,在将值从一个类的实例复制到另一个实例时遇到问题。我在每个类中创建了Clone方法来专门创建新实例,以避免多个变量仅仅指向同一个对象。这是我的课 类别统计: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
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选项:)