我有一个“Currency”类和一个“Currency”类,它是“Currency”类对象实例的集合。我认为这类似于 Excel 的 Worksheet
类,它是 Sheets
集合的成员。我可以通过索引或“Key”来寻址任何成员,例如 Sheets(1)
或 `Sheets("Sheet1")。
这是我的“货币”类模块中的代码。此处使用的是缩写,可能无法运行,但这不是问题。
Private Sub Class_Initialize()
' Class "Currencies"
Dim R As Long
Set AllCcys = New Collection
Arr = .Range("Currencies").Value
For R = 1 To UBound(Arr)
Set Ccy = Me.Add(Arr(R, 1))
Next R
End Sub
Public Function Add(ByVal Key As String) As cCcy
Dim Fun As cCcy
Set Fun = New cCcy
AllCcys.Add Fun, Key
Fun.Key = Key
Set Add = Fun
End Function
Public Property Get Item(Key As Variant) As cCcy
Set Item = AllCcys(Key)
End Property
通过我的设置,我可以使用 Currency.Item("USD").Rate
或 Currency.Item(1).Rate
等语法访问任何“Currency”对象code> 我认为这很复杂。我想使用 Currency("USD").Rate
来模拟我在访问 Excel 的 Sheets
集合时所做的操作。
我怎样才能实现这一目标?
最佳答案
根据http://www.cpearson.com/excel/DefaultMember.aspx ,您可以通过以下步骤将自定义类中的任何过程指定为默认成员:
- 导出
货币
类模块 - 在记事本中打开导出的模块
- 在
Item
属性中添加Attribute Value.VB_UserMemId = 0
,如下所示:
Public Property Get Item(Key As Variant) As cCcy
Attribute Value.VB_UserMemId = 0
Set Item = AllCcys(Key)
End Property
- 保存并导入回您的文件。
注意:您只能将 1 个过程作为默认成员,并且您将不会在 VBE 中看到 Attribute Value.VB_UserMemId = 0
行。
关于excel - 从项目集合中调用项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68720163/