想法是将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
我将尝试提出的解决方案。
thx
相关问题: 我前段时间在溢出中问了这个问题: Passing Listobject Range to array and getting error "out of range" 并读一本 Excel VBA Type Mismatch Error passing range to array 还有其他几个。
答案 0 :(得分:1)
以下方法应该起作用:
DbContextOptions<ApplicationDbContext>
注意:始终将其声明为强制数组,而不仅仅是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
。
答案 1 :(得分:1)
您似乎不希望deleteRefSigns
修改调用过程传递的参数。如果是这样,您可以按值传递参数...
Function deleteRefSigns(ByVal txT As String) As String