VBA中引用标签的常量

VBA中引用标签的常量,vba,constants,Vba,Constants,VBA新手。试图创建引用工作表中命名列的常量,但出现错误。这是您可以在VBA中执行的操作,还是我的语法错误 示例: Public Const ColNum As Integer = [SomeColumn].Column 编译错误告诉您出了什么问题:需要常量表达式 换句话说,正如@roryap提到的,您只能对常量表达式使用文本值,不能为其分配任何必须在运行时进行计算的内容。一种可能的解决方法是使用常量字符串(即范围名称)并根据需要分配到其他位置 从父/主过程调用另一个将分配给模块级或公共变量的

VBA新手。试图创建引用工作表中命名列的常量,但出现错误。这是您可以在VBA中执行的操作,还是我的语法错误

示例

Public Const ColNum As Integer = [SomeColumn].Column

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

换句话说,正如@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

注意:如果命名范围不存在,则此操作将失败:)

在编译代码时(即在运行之前),必须能够计算常量

这没关系:

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

常量只能是文本值。OK的可能重复,这就是我所想的。谢谢你澄清这一点。