我想建立技能结构和那些技能领域。例如:数学区域中的技能乘法。
我的区域具有某些属性(名称或权重),我的技能也具有属性(名称,权重,等级等)。
我想使用以下语法:
Areas(1).Skills(2).Name = "solving equations"
有可能吗?感谢to your help,现在我可以在代码中使用Areas(1).Name
了,现在我正在寻求下一步的帮助。
我想如果我有Areas(1).Skill.Name
语法,我可以通过添加技能索引来解决,所以问题就出在如何创建类的“子对象” (使用{ {1}}仍将“区域”作为对象)?
答案 0 :(得分:0)
为此,您首先需要将类模块插入VBA项目。
在VBE中,右键单击您的VBA项目:插入>类模块。
添加两个类模块:
首先,您将调用Skill
-在属性中,将名称更改为Skill
。双击它,然后在此处输入此代码:
Public Name As String
Public Weight As Double
Public Rank As Long
'any other fields you want
第二类模块-再次在属性中将名称更改为Area
。
根据您的描述,我假设您想在那里收集技能。为此,您需要单击功能区中的工具,转到参考并添加 Microsoft.Scripting.Runtime 。然后粘贴该类的代码:
Public Name As String
Public Weight As Double
Private pSkill As Collection
Property Get Skills() As Collection
Set Skill = pSkill
End Property
Property Let Skills(arg As Collection)
Set pSkill = arg
End Property
请注意,我们没有在pSkill
中指定元素的类型,因此在处理它时需要小心。
完成所有这些操作后,您可以根据需要使用它,如以下代码所示:
Sub s()
Dim s1 As Skills, s2 As Skills
Set s1 = New Skill
Set s2 = New Skill
s1.Name = "solving equations"
s1.Weight = 2.03
s1.Rank = 1
s2.Name = "counting to ten"
s2.Weight = 1.01
s2.Rank = 2
Dim a(1) As Area, someSkills As Collection
Set someSkills = New Collection
someSkills.Add s1
someSkills.Add s2
Set a(0) = New Area
a(0).Skill = someSkills
MsgBox a(0).Skills(1).Name
End Sub