我刚刚被杀,试图上课。我已经在网站周围购物并看到了几个例子,但也许是因为它的1:43我很难理解它们。
我成功地使用了一个类来自动化大型数据输入项目。我创建了一个名为catDist的类,它是公司可以制造或销售的农产品类型的类别分布。
catDist包含六个属性: 私人自我作为字符串 私人Q1为双倍 私人Q2为双倍 私人Q3为双倍 私人Q4双倍 私有激活为布尔
他们都有标准的get和let代码。
有48种可能的类别。我有一个模块可以创建48个实例,其中包含48个不同的selfWorth值(例如" Cottonseed"或" maize"等),并将Q1到Q4设置为0。该模块最初使用Userform,我可以键入值并按Enter键。如果它看到我在特定文本框中输入了一个值(是的,那里有48X4个文本框),它会将激活设置为true并将相关的Q更改为我输入的值。
我现在想做什么。
取得了巨大的成功。现在我要做的是创建一个名为" Distributor"的类。每个经销商类都有4个集合有catDist对象。我可以创建分发器类。我可以创建catDist类。但是对于上帝的爱,我无法找到一种方法将相应的分配器catDist属性设置为我在Set方法中使用的catDist值。
Sub testRegist()
Dim registrant As testRegistrant
Set registrant = New testRegistrant
registrant.registNum = "Z000123"
'MsgBox (registrant.registNum)
Dim cowMilk As testcatDist
Set cowMilk = New testcatDist
cowMilk.selfWorth = "Cow Milk"
cowMilk.distribution = 4.6
registrant.testCat = cowMilk
Debug.Print registrant.testCat.selfWorth
End Sub
catDist Class
Private pselfWorth As String
Private pdistribution As Double
Public Property Get selfWorth() As String
selfWorth = pselfWorth
End Property
Public Property Let selfWorth(name As String)
pselfWorth = name
End Property
Public Property Get distribution() As Double
distribution = pdistribution
End Property
Public Property Let distribution(dist As Double)
pdistribution = dist
End Property
注册人a.k.a经销商类
Private pRegistNum As String
Private pCatDist As testcatDist
Public Property Get registNum() As String
registNum = pRegistNum
End Property
Public Property Let registNum(registration As String)
pRegistNum = registration
End Property
Public Property Get testCat() As testcatDist
testCat = pCatDist
End Property
Public Property Let testCat(cat As testcatDist)
Set pCatDist = New testcatDist
pCatDist = cat
End Property
答案 0 :(得分:2)
我看到的唯一问题是您使用的是Let
而不是Set
。在VBA中,您在分配对象时使用Set
。
当你写registrant.testCat = cowMilk
(在你的Sub
),testCat = pCatDist
(在testRegistrant.testCat
的吸气者中)和pCatDist = cat
(在testRegistrant.testCat
的设定者中1}})您隐式使用Let
(就像您编写了Let registrant.testCat = cowMilk
)而不是(明确地)使用Set
。
所以,如果你在测试Set registrant.testCat = cowMilk
中写Sub
,在getter中写Set testCat = pCatDist
,在setter中写Set pCatDist = cat
,你就应该好了。
此外,在同一个setter中,由于您在下一行中将pCatDist
传递给它,因此不需要cat
的初始化。
而且,正如@GSerg(谢谢)所说,你的二传手的签名应该是Public Property Set testCat(cat as testcatDist)
而不是Public Property Let
。