这个论坛里已经提到过Dates
正在转换为Strings
by the WorksheetFunction.Transpose
method.
我更深入地研究了这一点。
看起来WorksheetFunction.Transpose
转换许多数据类型。转置后的结果将是Boolean
, Double
, or String
在 VBA 中使用此方法时需要考虑到这一点。
这是一些演示该问题的代码:
Option Explicit
Option Base 1
Sub Tester()
Dim v, w, i As Long
v = Array(CBool(-1), CBool(0), CByte(9), CDbl(1234), CDec(1234), _
CInt(1234), CLng(1234), CLngPtr(1234), CSng(1234), _
CCur(123456), #5/1/2015#, "1234")
w = WorksheetFunction.Transpose(v)
For i = 1 To UBound(v)
Debug.Print v(i), TypeName(v(i)), w(i, 1), TypeName(w(i, 1))
Next i
End Sub
调试.打印输出
True Boolean True Boolean
False Boolean False Boolean
9 Byte 9 Double
1234 Double 1234 Double
1234 Decimal 1234 Double
1234 Integer 1234 Double
1234 Long 1234 Double
1234 Long 1234 Double
1234 Single 1234 Double
123456 Currency $123,456.00 String
01-May-15 Date 01-05-2015 String
1234 String 1234 String
EDIT另一个问题是WorksheetFunction.Transpose
- 给定一个一维数组
- 转置数组第一维的上限将由以下公式给出
Ubound(1D_array) mod 2^16
- Only the first
uBound(1D_array) mod 2^16
elements will be returned to the transposed array.
- 因此,如果一维数组的 ubound 为 65537,则转置数组将仅包含单个项目(原始数组中的第一项)
- No error message will be returned.
- 我相信缺少错误消息,并且这种行为是从 Excel 2013 开始的。我记得早期版本在这种情况下会返回错误消息。