【问题标题】:Excel VBA - Enumeration in ClassExcel VBA - 类中的枚举
【发布时间】:2021-08-18 12:02:02
【问题描述】:

我对类模块很陌生。

我知道如何在类中进行枚举, 但是是否也可以引用它的值?

例如:

'Class Module
Public Enum Alphabeth
A = 1
B
C
End enum

假设我为这个类创建了一个名为“Alpha”的实例, 然后我可以以某种方式引用枚举中“C”的值吗? 像 Alpha.myEnum.C 之类的东西(应该给出“3”的值)。

【问题讨论】:

  • 在课堂内外,你可以像这样引用枚举:Alphabeth.C
  • 但是我不能使用类名吗?我希望我可以结合 Classname + Enumname + Enum,比如 Alpha.myEnum.C ...
  • 这能回答你的问题吗? Nested VB (VBA) Enumeration
  • @Rezzy777 我不相信你可以像你想要的那样包含类名。通常枚举用作方法的参数或返回值。

标签: excel vba class enums enumeration


【解决方案1】:

在类模块中:

Public Enum Alphabet
    a = 1
    b
    c
End Enum

Public Property Get GetEnum(Letter As String) As Long
    Select Case Letter
        Case "a"
            GetEnum = Alphabet.a
        Case "b"
            GetEnum = Alphabet.b
        Case "c"
            GetEnum = Alphabet.c
        ' etc
    End Select
End Property

在常规模块中:

Sub UseEnum()

    Dim Alphabet As clsAlphabet
    Set Alphabet = New clsAlphabet
    
    MsgBox Alphabet.GetEnum("a")

End Sub

编辑: 找到了更好的解决方案: 在类模块中:

Public Enum Alphabet
    a = 1
    b
    c
End Enum

Public Property Get Alphabet(Letter As Alphabet) As Alphabet
    Alphabet = Letter
End Property

在常规模块中:

Sub UseEnum()

    Dim Alphabet As clsAlphabet
    Set Alphabet = New clsAlphabet
    
    MsgBox Alphabet.Alphabet(a)

End Sub

【讨论】:

  • 谢谢,这正是我的意思。我实际上认为使用枚举(在类中)会更好,但现在我发现它只会让一切变得非常复杂,因为你不能直接引用它。我会尝试别的。再次感谢大家!
【解决方案2】:

Enum 不是一个类...它是一个语句。

  1. 请将Enum 声明复制到标准模块顶部(在声明区域中):
Public Enum Alphabeth
    A = 1
    b = 2
    c = 3
End Enum
  1. 复制同一模块中的下一个Sub 或另一个并运行它:
Sub testEnumAlph()
   Debug.Print Alphabeth.A, Alphabeth.b, Alphabeth.c
End Sub

如果写 Alphabeth,intellisense 会建议 Enum 成员...

它将在即时窗口中返回(Ctrl + G,在 VBE 中):1 2 3...

【讨论】:

  • 我知道它不是一个类,所以它也不能在一个类中使用?像 Class.myEnum.C 这样的东西?
  • @Rezzy777 可以,但方式不同。您应该创建方法来获取和让值并使用它们返回enum 成员。如果需要,我可以通过示例向您展示一个简单的类...
  • 谢谢你,但这不再是必要的 ;-)
  • @FaneDuru fyi 可能想看看如何在Type inside class moduleType 定义中定义不可见的 [_Start] 成员
  • @T.M.我知道这些隐形成员。我正在准备一个包含Enum 和一个隐形成员的类示例,但是OP 并没有说他对一个示例感兴趣并且其他人发布了一个示例。但是,我会按照链接...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多