2

在以下子例程中,定义二维数组似乎不适用于续行。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
4

1 回答 1

7

不要使用方括号。

VBA 中的方括号不代表这是一个数组”,即使它看起来像它(如果你熟悉 JSON),即使它可能工作。

VBA 中的方括号代表“这是宿主应用程序将在运行时计算的表达式”。

换句话说,它为 Excel 的表达式评估引擎提供了工作:它不是 VBA,而是 Excel。方括号表达式中的任何内容的语法在 Excel 的公式栏1中必须是合法的。

使用Array标准 VBA 函数在 VBA 中创建数组:

TestArray1 = Array("1String1", "1String2", "1String3", "2String1", "2String2", "2String3", "3String1", "3String2", "3String3")

在两个字符串之间的任意点用续行符将其拆分:

TestArray1 = Array( _
    "1String1", "1String2", _
    "1String3", "2String1", _
    "2String2", "2String3", _
    "3String1", "3String2", _
    "3String3")

请注意,不一致的;vs,分隔符可能是问题的一部分:Excel 公式使用系统的列表分隔符:这是您要在方括号表达式中使用的字符 - 但您不需要这样做,因为您不需要'不需要任何方括号表达式。

在 VBA 中没有用于内联初始化 2D 数组的语法。改为显式声明并调整数组大小:

Dim my2D(1 To 10, 1 To 10)
my2D(1, 1) = "1string1"
'...

如果您的代码中有这么多硬编码字符串,那么您正在编码data。数据属于存储,而不是代码。从工作表中读取数据,您将免费获得一个 2D 变体数组,具有单行,不滥用语言语法,如果数据需要更改,则代码不会:

Dim my2D As Variant
my2D = sourceRange.Value

1除非它是 VBA foreign identifier,在这种情况下 Excel 无法评估它。只是不要使用方括号表达式,它们会令人困惑。

于 2019-12-12T17:34:21.553 回答