【发布时间】:2019-11-27 13:14:35
【问题描述】:
这个想法是将 listobject.databodyrange 的完整内容传递给一个数组以在内存中进行操作,而不必重复访问工作表单元格的值,这非常耗时。
这是代码。
Dim theArray As Variant
theArray = mylistObject.DataBodyRange.value
MsgBox (theArray(1, 1)) '= column 1 row 1 = first element
它有效,到目前为止一切都很好。
但是!!!由于 theArray 的维度为 Variant,因此它们的元素不是字符串,因此当将 theArray 的每个值传递给需要字符串的函数时,就会出现错误。
怎么办?
注意:我知道我可能会将函数本身的数据类型更改为变量,但是这个函数是从很多例程中调用的,我不敢碰它。我宁愿尝试寻找将变体的内容转换为字符串的方法
喜欢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
我将尝试提出的解决方案。
谢谢
相关问题: 前段时间我在溢出中问了自己这个问题: Passing Listobject Range to array and getting error "out of range" 并阅读这个 Excel VBA Type Mismatch Error passing range to array 和其他几个。
【问题讨论】:
-
能发一下功能代码吗?
-
Dim MyStr As String: MyStr = CStr(theArray(1, 1))应该可以工作。您能否发布一个重现错误的minimal reproducible example? • 注意:始终将其声明为数组Dim theArray() As Variant,以确保它包含一个数组。否则,如果您执行theArray = Range("A1").value,它将仅包含一个值,如果您的范围是动态的,这可能很容易失败。 -
请至少发布失败的代码行。
-
您可以一次性将表中的所有数据作为字符串直接放入数组中(您需要在代码中直接引用您的表名)
-
@evr 那太好了!!!但如何。
标签: excel vba string variant listobject