【问题标题】:VBA6 type mismatch on parameter array参数数组上的 VBA6 类型不匹配
【发布时间】:2020-08-30 14:34:47
【问题描述】:

以下(高度简化的)代码在调用参数 xabc 的 evalexp 时生成 type mismatch: array expected。为什么?

Public nfa() As String
Public rules() As String

Sub BuildNFA(xabc () As String)
Dim x
ReDim xnfa(5, 10)
x = evalexp(0, xabc)
End Sub

Function evalexp(rnb As Integer, xyz() As String) As String
  xyz(rnb, replnode).name = "replnode"
evalregexp = ""
End Function

【问题讨论】:

  • 我收到一个编译错误,指出xyz(rnb, replnode).name 中的name 是无效的限定符。你在做什么??
  • 首先,从xabc () 中删除空间。其次,数组没有name 属性。最后,我不明白您的代码中发生了什么。
  • 对不起。印刷错误。带有 xyz 的行应该是 xyz(rnb, replnode) = "replnode"。
  • 正如我所说,所给出的代码是从更多涉及的实际代码中简化的。带有 xyz 的行读作 xyz(rnb, replnode) = "replnode"。
  • 我的意思是,我帖子中给出的代码(在我看来)完全有效,但无法编译。这会影响大约 10000 行的实际代码。(注意:实际代码仅使用一个(动态)数组即可正常工作。现在,它需要扩展为多个数组,因此它包含的过程需要传递数组引用到子过程和函数 - 这也不被编译器接受)。

标签: arrays vba parameters


【解决方案1】:

Xyz 被声明为 () 但用作 (,)。即您声明一个一维数组,然后尝试将其用作二维数组。另外 xyz 被声明为字符串,但您尝试访问一个不存在的名称属性。请安装 Rubberduck VBA 插件并学习使用它的代码检查。

【讨论】:

  • 谢谢。我原来的问题解决了。请不要调查我帖子中给出的代码的逻辑。它从实际代码中过度简化。并且显然具有误导性。最初的问题是数组名称和索引之间的空白,编译器没有正确诊断(确实是类型不匹配!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多