将 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
这个想法是将 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
我将尝试提出的解决方案。
感谢
相关问题:
我前段时间问过自己这个问题:
以下应该有效:
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