【问题标题】:Line continuation not working in VBA for 2D Array construction行延续在 VBA 中无法用于 2D 阵列构造
【发布时间】:2019-12-13 01:46:25
【问题描述】:

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

【问题讨论】:

  • 这能回答你的问题吗? vba line continuation with bracket expression
  • 请注意,您最后混淆了}],而不是]}。
  • 谢谢,这两个帖子确实解决了这个问题,但是我遇到了同样的问题。所以我知道,每当您使用方括号 [] 时,Excel 会将其视为 Excel,而不是 VBA,因此无法识别延续。将短字符串串成一个较长的字符串,然后使用 Evaluate 确实有效,但仅适用于总长度小于 255 个字符的字符串。我试图通过使用大量行来避免填充二维数组:myArray (1,1) = "Str1", myArray(1,2) = "Str1 and stuff" 等,或者使用环形。在我开始工作之前还有其他想法吗? ;)
  • 致 BigBen - 是的,谢谢,当我更正它时,它也出现了同样的错误。必须在提交中切换。

标签: excel vba line-continuation


【解决方案1】:

不要使用方括号。

VBA 中的方括号DO NOT 代表“这是一个数组”,即使它看起来 像它(如果您熟悉 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")

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

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

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

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

Dim my2D As Variant
my2D = sourceRange.Value

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

【讨论】:

    猜你喜欢
    • 2017-07-06
    • 2016-08-25
    • 2018-12-20
    • 2020-03-30
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多