我正在编写一些代码来与公司的在线时间表系统交互。我想使用Enums或类似的东西来存储网站元素的值,以使它们更易于更改或访问。我试图使用限定符引用这些枚举中的成员,但收到无效的限定符错误消息。我可以在不使用限定符的情况下引用这些枚举,但是这消除了我使用它们的理由。有没有办法解决?

'Add initial user
Public Enum FirstUser

    User = 47
    ID = 50
    pass1 = 56
    pass2 = 59
    logBtn = 67
    backbtn = 133
    MenuChanged = 138
    logOut = 141

End Enum

'Delete user
Public Enum delUser

    User = 21
    UserBtn = 43
    Ok = 46
    After = 58

End Enum

Sub mySub()
    dim del as delUser

    msgbox del.User

End Sub

最佳答案

定义时:

dim del as delUser


... del可以采用Enum delUser的值之一,因此它就像Integer一样-它没有类似结构的数据类型。因此,这种语法(似乎暗示del具有成员属性)确实是无效的:

MsgBox del.User


你可以这样做:

del = delUser.User ' You assign the value 47
MsgBox del


...将显示47。

备用数据结构:收集

也许您在寻找其他东西。例如,您可以使用Collection

Dim del As New Collection

del.Add 47, "User"
del.Add 50, "ID"

MsgBox del("User") ' 47


备用数据结构:类

集合仍然有局限性。您可以研究类,这些类可用于创建具有所需所有属性的(用户)对象。

通过一些示例here进行阅读。

然后,您需要创建一个类模块(与工作表和工作簿代码分开),为其提供一个名称(例如“ clsUser”),并提供属性。一个非常简单的示例可能如下所示:

Private sUserName As String

Property Let UserName(name As String)
    sUserName = name
End Property

Property Get UserName() As String
    UserName = sUserName
End Property


然后,在原始模块中,您可以编写如下内容:

Dim u As clsUser
Dim u2 As clsUser

Set u = New User();
u.UserName = "Sarah";

Set u2 = New User();
u2.UserName = "John";

MsgBox u.UserName & ", " & u2.UserName;

09-06 14:34