【发布时间】:2012-04-10 09:16:18
【问题描述】:
最终我试图将一个范围写入文本文件。当我得到范围的值时,它返回一个二维变量数组。但是,如果我尝试将其传递给转换函数,则会出现类型不匹配错误。
代码是:
Dim Data As String
Set ts = fso.CreateTextFile("testfile.txt", True)
Data = ArrayToDelimitedString(wksMyWorkSheet.Range("rngMyRange").Value)
ts.Write (Data)
ts.Close
Public Function ArrayToDelimitedString(variantArray() As Variant) As String
Dim delimitedString As String, index As Integer
For index = 1 To UBound(variantArray(1))
delimitedString = delimitedString & CStr(variantArray(1, index)) & ","
Next
ArrayToDelimitedString = Left(delimitedString, Len(delimitedString) - 1)
End Function
我想知道为什么 .Value 返回一个二维数组,为什么它会给我这个不匹配错误。
【问题讨论】:
-
wksMyWorkSheet.Range("rngMyRange").Value 将返回一个 3D 数组(包含 Variant 对象的 Variant)。您使用的是什么类型的 Range?一排?一个专栏?一个区域?
-
范围是一行。它是一个 3D 数组吗?当我单步执行代码时,本地人显示它是 Variant/Variant(1 到 1、1 到 7)。抱歉,我才用 VBA 一个月,不太熟悉。
-
嗯,Range 方法总是会返回一个 3D 数组。如果您尝试对 3D 数组使用 Transpose 方法,它将转置您的元素矩阵(这不是您需要的)。但是对于单行或单列,它会将数据类型从 Variant/Variant(1 to 1, 1 to 7) 转换为 Variant/String。
-
有什么方法可以不使用 Range 方法抓取一个范围并将其放入一个数组中?这样它就可以是一个一维数组,每个数组元素代表范围内的一个单元格。
标签: vba excel office-2007