【问题标题】:Excel VBA constant as argumentExcel VBA 常量作为参数
【发布时间】:2025-12-26 16:50:17
【问题描述】:

提前抱歉,我是一名自学成才的 VBA 程序员,我不知道如何表达我的问题! 我已经声明了具有相似名称的常量,即

Public Const BP1Enable = "something1something:someotherthing1someotherthing"
public const BP2Enable = "something2something:someotherthing2someotherthing"

等等

我有 10 个这样的常量。我有一个以这些常量作为参数的子:

Sub FieldEnable (ByVal enableconst)

现在我想使用 i 作为计数器在循环中调用 FieldEnable 子:

For i = 1 To 10

 BPfieldname = "BP" & i & "Enable"
 FieldEnable enableconst:=BPfieldname
Next i

这不起作用,发生的事情是在子 FieldEnable 中分配给 enableconst 的“值”是“BP1Enable”,而不是常量 BP1Enable 的值,即“something1something:someotherthing1someotherthing”。

调用子FieldEnable时如何使用变量BPfieldname?

我希望这是有道理的。任何帮助表示赞赏。

【问题讨论】:

    标签: excel vba arguments constants


    【解决方案1】:

    另外,如果您要在多个地方、多个函数中使用这个“常量”,您可以有效地创建一个数组常量,甚至可以这样调用。

    Public Sub Test()
        For i = LBound(BPEnable) To UBound(BPEnable)
            Debug.Print BPEnable(i)
        Next i
    End Sub
    
    Public Function BPEnable() As Variant
        BPEnable = Array("One", "Two", "Three", "Pi", "Four")
    End Function
    

    立即窗口:

    One
    Two
    Three
    Pi
    Four
    

    【讨论】:

      【解决方案2】:

      将变量转换为单个数组。

      看到这个http://msdn.microsoft.com/en-us/library/wak0wfyt.aspx

      编辑:正如@sina 正确指出的那样,VBA 不允许常量数组,

      所以不要尝试这个

      Dim BPEnable = {
        "something1something:someotherthing1someotherthing",
        "something2something:someotherthing2someotherthing",
        ....
      }
      

      你应该试试这个

      Dim BPEnable
      BPEnable = Array( _
        "something1something:someotherthing1someotherthing", _
       "something2something:someotherthing2someotherthing", _
       "..."
      )
      
      
      For i = 0 To UBound(BPEnable)
       BPfieldname = BPEnable(i)
      Next i
      

      【讨论】:

      • 太棒了!感谢您的帮助。
      【解决方案3】:

      最好的猜测是使用常量数组,但 VBA 不支持常量数组。

      因此,您可以在开始循环之前从常量中构建一个数组:

      Dim BPEnable
      BPEnable = Array(BP1Enable, BP2Enable)
      For i = 0 To UBound(BPEnable)
       FieldEnable enableconst:=BPEnable(i)
      Next i
      

      另一种选择是将所有常量声明为一个带有定义分隔符的长字符串,并在该字符串上使用拆分函数来生成数组。

      【讨论】: