【发布时间】:2021-06-22 14:58:25
【问题描述】:
我有从一个工作簿中读取数据并在另一个工作簿中使用它们的代码。我将数据放入 4D Variant Array。它使用 ByRef 在 subs 之间传递。当我访问一个元素时,我得到了
编译错误:ByRef 参数类型不匹配
如果我在 OneIterationOfTask() 的上下文中将 importArray 添加到 Watchlist,然后破坏代码,则变量数组仍会填充数据。如何从特定索引中获取值,例如importArray(1,2,3,4)?
'Called when user clicks button - Variant Array okay here
Public Sub WriteValues()
Dim importArray() As Variant
importArray = getImportArray()
useImportArray importArray
End Sub
'Gets values from another workbook - Variant Array okay here
Private Function getImportArray() As Variant
Dim importArray() As Variant ' 4D array of strings stored as variants
[...Get data...]
getImportArray = importArray' Return array
End Sub
'Decides how to use import array - Variant Array okay here
Private Sub useImportArray (ByRef importArray())
oneIterationOfTask importArray
End Sub
'Repetitive code - Variant Array ByRef argument type mismatch.
Private Sub OneIterationOfTask (ByRef importArray())
WriteStringOutput importArray(1,2,3,4) 'Okay if I comment out this line
End Sub
【问题讨论】:
-
类型化数组是一团糟......即使它们像这里一样隐式类型化。我建议将它们作为普通的
Variant参数传递,例如ByRef imports As Variant;getImportArray正在返回一个普通的Variant。 -
尝试将
importArray(1, 2, 3, 4)分配给字符串变量,然后将字符串变量传递给WriteStringOutput。 -
@Domenic - 你非常接近。问题不在于数组,而是将 CStr() 放在任何存储为 Variants 的字符串周围,当期望字符串时使用。
-
太好了,很高兴整理好了,干杯!
标签: arrays vba compiler-errors