行延续在 VBA 中不适用于 2D 阵列构造

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)

Mat*_*don 7

不要使用方括号。

在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 无法对其进行评估。只是不要使用方括号表达式,它们会令人困惑。