以结构化方式命名全局变量

tee*_*pee 1 excel vba excel-vba

我当前的项目具有全局常量,用于定义此项目将搜索的工作簿中的某些行和列.我已经将它们定义为:

Public Const headRow As Integer = 1
Public Const descRow As Integer = 2
Public Const pnumCol As Integer = 1
Public Const teamCol As Integer = 2
Public Const dateCol As Integer = 3
Public Const hourCol As Integer = 4
Public Const typeCol As Integer = 5
Public Const taskCol As Integer = 6
Public Const noteCol As Integer = 7
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更清晰的方法来定义这些,这将允许我以这样的方式写这些:

ColumnNums.team
ColumnNums.task
ColumnNums.note     'etc
Run Code Online (Sandbox Code Playgroud)

我认为可以通过定义我自己的类型来完成与此相似的事情,但这可能不值得.我基本上希望这是一个简单的方法来记住变量名称,因为我编写了更多代码,以及能够计算每组中有多少项目.在这种情况下,类型或集合是否有用?

小智 6

对于混合变量类型,您可以将它放在类模块中,命名类模块ColumnNumbers并将以下代码放入:

Public Property Get Team() As Long
    Team = 1
End Property

Public Property Get TeamName() As String
    TeamName = "Team One! :-)"
End Property
Run Code Online (Sandbox Code Playgroud)

然后你可以在任何模块中使用它:

Dim colNums As New ColumnNumbers

Sub foo()
MsgBox colNums.Team
End Sub
Run Code Online (Sandbox Code Playgroud)

如果您只想返回long值,请将其放在枚举中:

Enum ColumnNumbers
    Team = 1
    Description = 2
End Enum

Sub foo()
MsgBox ColumnNumbers.Team
End Sub
Run Code Online (Sandbox Code Playgroud)

芯片皮尔森已经做了描述枚举了出色的工作这里是值得一读,如果你还没有发现它们.

  • 不要忽略类模块选项,它将使您开始面向对象编程,这是一种更好的思考方式.:) (2认同)