Excel VBA常量作为参数

时间:2013-12-11 09:41:52

标签: excel vba arguments constants

提前抱歉,我是一名自学成才的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?

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

3 个答案:

答案 0 :(得分:1)

将变量转换为单个数组。

请参阅此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

答案 1 :(得分:0)

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

因此,您可以在开始循环之前使用常量构建数组:

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

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

答案 2 :(得分:0)

另外,如果你要在多个地方使用这个“常量”,不止一个函数,你可以有效地使数组保持不变,甚至可以这样调用。

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