excel - 从项目集合中调用项目

标签 excel vba class collections

我有一个“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").RateCurrency.Item(1).Rate 等语法访问任何“Currency”对象code> 我认为这很复杂。我想使用 Currency("USD").Rate 来模拟我在访问 Excel 的 Sheets 集合时所做的操作。

我怎样才能实现这一目标?

最佳答案

根据http://www.cpearson.com/excel/DefaultMember.aspx ,您可以通过以下步骤将自定义类中的任何过程指定为默认成员:

  1. 导出货币类模块
  2. 在记事本中打开导出的模块
  3. 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/

    相关文章:

    C++ 运算符重载

    excel - 汇总所有组合 Excel 或 Google 电子表格

    java - 下载文件 java spring rest api

    连接字母和变量以创建单元格引用的 VBA 代码

    VBA,用 LastRow 定义范围

    c++ - 动态分配的类对象

    java - 文件在 Excel 版本 2013 中打开但在 2016 中没有打开?

    Excel VBA 循环行直到空单元格

    组合框中的 VBA 自动完成文本

    javac 根据赋值方法不同地处理 static final