VBA中的常量引用标签

时间:2015-01-23 01:16:33

标签: vba const constants

VBA新手。试图创建一个引用我的工作表中的命名列的常量,并且收到错误。这是你在VBA中可以做的事情还是我的语法错了?

示例

Public Const ColNum As Integer = [SomeColumn].Column

2 个答案:

答案 0 :(得分:2)

必须能够在代码编译时(即在运行之前)评估常量

没关系:

Const A as Long = 10 'constant value

和此:

Const B As Long = A 'from another constant

甚至

Const B As Long = A * 10 'constant expression

但不是这样:

Const B As Long = ActiveSheet.Columns.Count 'errors

因为ActiveSheet.Columns.Count只能在运行时

确定

答案 1 :(得分:0)

编译错误告诉您错误:需要常量表达式

换句话说,正如@roryap所提到的,你只能为常量表达式使用文字值,不能为它分配必须在运行时计算的任何内容。一种可能的解决方法是使用常量字符串(即您的范围的名称)并根据需要分配到其他地方

从您的父/主程序,调用另一个将分配给模块级或公共变量的程序

Option Explicit
Const MyColumnName as String = "Dave_Column"
Dim ColNum as Integer

Sub main()

    Call InitializeVariables

    'The rest of your code ...
    MsgBox ColNum

End Sub

Sub InitializeVariables()
    'Use this procedure to assign public/module scope variables if needed
    ColNum = Range(MyColumnName).Column

End Sub

或者,ColNum可以是带有可选参数的函数,当留空时会返回基于常量字符串的范围,或者您可以指定不同的范围名称/地址以返回另一个列号:

Option Explicit
Const MyColumnName as String = "Dave_Column"
Sub main()

    MsgBox ColNum

    MsgBox ColNum("H1")

End Sub
Function ColNum(Optional name$) As Integer

    If name = vbNullString Then 
        name = MyColumnName
    End If

    ColNum = Range(name).Column


End Function

注意:如果命名范围不存在,这将失败:)