将 ListObject 传递给数组。类型变量字符串错误

Pass ListObject to array. type variable String error

这个想法是将 listobject.databodyrange 的完整内容传递给一个数组以在内存中进行操作,而不必重复访问工作表单元格的值,这非常耗时。

这是代码。

 Dim theArray As Variant
     theArray = mylistObject.DataBodyRange.value

MsgBox (theArray(1, 1)) '= column 1 row 1 = first element

有效,到目前为止一切顺利。

但是!!!由于 theArray 被标注为 Variant,它们的元素不是字符串,因此当将 theArray 的每个值传递给需要字符串的函数时,会出现错误。

怎么办?

注意:我知道我可能会将函数本身的数据类型更改为 variant,但是这个函数被调用的例程太多,我不敢碰它。我宁愿尝试寻找将该变体的内容转换为字符串的方法

喜欢 theArray(i,j)str(thearray(i,j))(这不起作用)

一些帮助,一些想法?

编辑 1: 这是错误行:

Dim theclaims As Variant
      theclaims = rawClsTbl.DataBodyRange.value
For i = LBound(theclaims, 1) To UBound(theclaims, 1)
myText = deleteRefSigns(theclaims(i, 2))
etc

错误:byref 参数类型不匹配

其中: 函数 deleteRefSigns(txT As String) As String

我将尝试提出的解决方案。

感谢

相关问题: 我前段时间问过自己这个问题: 也读这个 Excel VBA Type Mismatch Error passing range to array 和其他几个。

以下应该有效:

Dim MyStr As String
MyStr = CStr(TheArray(1, 1))

注意:始终将其声明为强制数组,而不仅仅是 Variant

Dim TheArray() As Variant 'Variant array (can only be an array)
Dim TheArray As Variant 'Variant (can be a value or array)

… 以确保它包含一个数组。否则,如果您这样做,它将只包含一个值

TheArray = Range("A1").Value 

如果您的范围是动态的,这可能很容易失败。


如果你将一个范围读入数组,如

Dim TheArray() As Variant
TheArray = Range("A1:C20").Value 

那么不可能将数组声明为 String 它被设计为 Variant

您似乎不想 deleteRefSigns 修改调用过程传递的参数。如果是这样,您可以按值传递参数...

Function deleteRefSigns(ByVal txT As String) As String