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

时间:2015-12-17 21:25:11

标签: 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

我想知道是否有更简洁的方法来定义这些,这样我就可以用以下方式编写这些:

ColumnNums.team
ColumnNums.task
ColumnNums.note     'etc

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

2 个答案:

答案 0 :(得分:6)

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

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

Public Property Get TeamName() As String
    TeamName = "Team One! :-)"
End Property

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

Dim colNums As New ColumnNumbers

Sub foo()
MsgBox colNums.Team
End Sub

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

Enum ColumnNumbers
    Team = 1
    Description = 2
End Enum

Sub foo()
MsgBox ColumnNumbers.Team
End Sub

Chip Pearson已经完成了描述枚举here的绝佳工作,如果你还没有发现它们,那么值得一读。

答案 1 :(得分:2)

你可以使用这样的公共数组:

Public ColumnNum(0 To 2) As Long
Public RowNum(0 To 2) As Long

与枚举一起使用:

Public Enum Category
    team
    task
    note 'etc.
End Enum

然后ColumnNum(team)之类的东西就像一个公共变量:

Sub test1()
    ColumnNum(team) = 5
End Sub

Sub test2()
    Debug.Print ColumnNum(team)
End Sub

如果这两个潜艇按顺序运行,则打印5