引用标签的 VBA 中的常量



VBA的新手。 正在尝试创建一个引用工作表中命名列的常量,但收到错误。 这是您可以在 VBA 中执行的操作还是我的语法错误?

示例

Public Const ColNum As Integer = [SomeColumn].Column

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

这没关系:

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只能在运行时确定

编译错误告诉您出了什么问题: 需要常量表达式

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

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

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

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

最新更新