Class 一流

Class 一流,class,excel,vba,Class,Excel,Vba,我只是想把一个班级变成一个班级,结果被杀了。我在网站上逛了逛,看到了几个例子,但可能是因为1:43,我很难理解它们 我成功地使用一个类在工作中自动化了一个巨大的数据输入项目。我创建了一个名为catDist的类,它是公司可以生产或销售的农产品类型的分类分布 catDist包含六个属性: 作为字符串的私有自我价值 私人第一季度为双倍 二级私人楼宇 私人第三季为双季 私人机构第四季度业绩加倍 作为布尔值激活的私有 他们都有标准的获取和释放代码 有48种可能的类别。我有一个模块,它创建了48个实例,其中

我只是想把一个班级变成一个班级,结果被杀了。我在网站上逛了逛,看到了几个例子,但可能是因为1:43,我很难理解它们

我成功地使用一个类在工作中自动化了一个巨大的数据输入项目。我创建了一个名为catDist的类,它是公司可以生产或销售的农产品类型的分类分布

catDist包含六个属性: 作为字符串的私有自我价值 私人第一季度为双倍 二级私人楼宇 私人第三季为双季 私人机构第四季度业绩加倍 作为布尔值激活的私有

他们都有标准的获取和释放代码

有48种可能的类别。我有一个模块,它创建了48个实例,其中有48个不同的自我价值值(例如“棉籽”或“玉米”等),并将Q1到Q4设置为0。该模块最初使用一个Userform,我可以输入值并按enter键。如果它看到我在一个特定的文本框中输入了一个值(是的,有48X4个文本框),它会将activated设置为true,并将相关的Q值更改为我输入的值

我现在想做的事

这是一个巨大的成功。现在我要做的是创建一个名为“Distributor”的类。每个分发服务器类将有4个集合,其中包含catDist对象。我可以创建distributor类。我可以创建catDist类。但是,看在上帝的份上,我想不出一种方法来将相应的distributor 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
猫类

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

我看到的唯一问题是您使用的是
Let
而不是
Set
。在VBA中,指定对象时使用
Set

当您编写
registent.testCat=cowMilk
(在您的
Sub
中),
testCat=pCatDist
(在
testregister.testCat
的getter中)和
pCatDist=cat
(在
testregister.testCat
的setter中)时,您隐含地使用了
Let
(就像您编写了
Let register.testCat=cowMilk
)而不是(明确地)使用
Set

因此,如果您在测试中编写
Set register.testCat=cowMilk
,在getter中编写
Set testCat=pCatDist
,在setter中编写
Set pCatDist=cat
,您应该可以开始了

另外,在同一个setter中,不需要初始化
pCatDist
,因为您在下一行将
cat
传递给它


而且,正如@GSerg(谢谢)所说,您的setter的签名应该是
公共属性集testCat(cat as testcatDist)
而不是
公共属性让

显示一些代码:)哈哈,我正试图避免这种情况。我将放一个我用来测试这个概念的简化版本。如果你阅读了在这里发布的最佳实践,那么你会看到你需要发布一个简短的自我描述的正确代码示例。这样做的原因是,如果我们能够理解具体的问题,那么帮助您就容易多了。我真的没想到会有人这么快就来帮我。你们真是太棒了。这成功了!现在,我将尝试进入下一步,在注册者类中构建catDist对象的集合。不仅如此,还将
Public Property Let testCat
替换为
Public Property Set testCat