Lys*_*pon 1 excel vba line-continuation
在下面的子程序中,定义一个二维数组似乎不适用于行延续。TestArray1 按预期初始化,但是当我添加行延续时,我收到消息,
“编译错误 - 缺少右括号”。
(实际上我不确定英语的确切措辞,用德语做这个。在德语中,错误消息是,
“Fehler beim Komilieren:Fehlende schliesende Klammer”。
我敢肯定英语不远。)
为什么这行不通?
Sub TestArrays()
Dim TestArray1 As Variant, TestArray2 As Variant
TestArray1 = [{"1String1", "1String2", "1String3"; "2String1", "2String2", "2String3"; "3String1", "3String2", "3String3"}]
TestArray2 = [{"1String1", "1String2", "1String3"; _
"2String1", "2String2", "2String3"; _
"3String1", "3String2", "3String3"]}
End Sub
Run Code Online (Sandbox Code Playgroud)
不要使用方括号。
在VBA方括号不表示“这是一个数组”,即使它看起来像它(如果你是任何熟悉JSON反正),即使它可能工作。
VBA 中的方括号代表“这是宿主应用程序将在运行时计算的表达式”。
换句话说,它为 Excel 的表达式计算引擎提供了工作:它不是 VBA,而是 Excel。方括号内的任何内容的语法在 Excel 的公式栏1 中都必须是合法的。
使用Array标准 VBA 函数在 VBA 中创建数组:
TestArray1 = Array("1String1", "1String2", "1String3", "2String1", "2String2", "2String3", "3String1", "3String2", "3String3")
Run Code Online (Sandbox Code Playgroud)
在两个字符串之间的任何点用一个续行分割它:
TestArray1 = Array( _
"1String1", "1String2", _
"1String3", "2String1", _
"2String2", "2String3", _
"3String1", "3String2", _
"3String3")
Run Code Online (Sandbox Code Playgroud)
请注意,不一致;与,分隔符可能是问题的一部分:Excel 公式使用您系统的列表分隔符:这是您要在方括号表达式中使用的字符 - 但您不需要这样做,因为您不需要'不需要任何方括号表达式。
在 VBA 中没有内联初始化二维数组的语法。显式声明和调整数组大小:
Dim my2D(1 To 10, 1 To 10)
my2D(1, 1) = "1string1"
'...
Run Code Online (Sandbox Code Playgroud)
如果您的代码中有那么多硬编码字符串,那么您正在编码data。数据属于存储,而不是代码。从工作表中读取数据,您将免费获得一个二维变体数组,单行,不滥用语言语法,如果数据需要更改,则代码不会:
Dim my2D As Variant
my2D = sourceRange.Value
Run Code Online (Sandbox Code Playgroud)
1除非它是 VBA外来标识符,在这种情况下 Excel 无法对其进行评估。只是不要使用方括号表达式,它们会令人困惑。