【问题标题】:Trying to convert a variant array to delimited string and always getting type mismatch尝试将变体数组转换为分隔字符串并且总是出现类型不匹配
【发布时间】: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


【解决方案1】:

Range() 方法返回 Variant 的 Variant。 如果您想使用二维数组(字符串变体),请使用转置方法。

ArrayToDelimitedString(wApplication.WorksheetFunction.Transpose(wksMyWorkSheet.Range("rngMyRange").Value))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2016-09-27
    • 2013-05-06
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多