2014-04-26 146 views
2

我一直在尝试调换一个数组以将记录从ADODB.recordset粘贴到excel行。 (记录存储在2D Variant数组中)。但是,每当我尝试类似下面代码的第一行时,就会得到13:类型不匹配错误代码。因此,我试图深入了解错误所在,并构建了一个简单的整数2d数组。看起来转置函数不能在不抛出13错误代码的情况下进行这种转置。在线研究似乎表明,这种错误是由于转置的元素数量超过64k而引起的,但这不可能低于此值。有什么想法吗?vba转置类型不匹配错误

varRecords = rs2.GetRows(3)  ' rs2 is a ADOBD.Recordset 
intNumReturned = UBound(varRecords, 2) + 1 
intNumColumns = UBound(varRecords, 1) + 1 

For intRow = 0 To intNumReturned - 1 
    For intColumn = 0 To intNumColumns - 1 
    Debug.Print varRecords(intColumn, intRow) 
    Next intColumn 
Next intRow 

Dim Destination As Range 
Set Destination = Range("k1") 

Dim i, j As Integer 

'Destination.Resize(UBound(varRecords, 2) + 1, UBound(varRecords, 1) + 1).Value = Application.Transpose(varRecords) - COMMENTED OUT BECAUSE IT ERRORS TYPE 13 TYPE MISMATCH 


Dim myarr(3, 4) As Integer 
myarr(0, 1) = 4 
myarr(2, 4) = 6 

Dim myvar As Variant 

Set myvar = Application.Transpose(myarr)  ' - ERROR THROWN HERE 
+2

删除'Set'关键字:'myvar = Application.Transpose(myarr)' –

+0

如果您正在寻求第一行的帮助,您应该为此问题添加更多信息。否则,发布的答案是正确的,应该被接受。对于注释的代码,如果你显示'varRecords'如何实例化,赋值和它的维度,那么它可能会有帮助。还请指出您在该行上获得的具体错误消息。干杯。 –

+0

好的,将编辑现有的问题 – chrisc

回答

0

我得到相同的错误(13:类型不匹配)。一个简单的解决办法是你自己转数组:

Sub arrTest() 
    Dim myarr(3, 4) As Integer 
    myarr(0, 1) = 4 
    myarr(2, 4) = 6 

    Dim myvar As Variant 

    ReDim myvar(1 To UBound(myarr, 2), 1 To UBound(myarr, 1)) 
    For i = 1 To UBound(myvar, 2) 
     For j = 1 To UBound(myarr, 1) 
      myvar(i, j) = myarr(j, i) 
     Next 
    Next 

End Sub 

编辑:Simoco是正确的,去掉“设置”关键字完全解决了这个问题。

2日编辑:对我来说,以下工作:

Destination.Resize(UBound(varRecords, 2) + 1, UBound(varRecords, 1) + 1) = Application.Transpose(varRecords) 

你执行的代码的第一线时收到什么样的错误?

+0

Simoco soln确实解决了13错误,但不幸的是,并没有解决在没有设置命令的情况下第一行代码(当前注释掉)发生的错误。 – chrisc

+0

你打算如何处理这条线?目前,您似乎在尝试将数组赋值给一个值(等式左边的.Value语句)。这不可能。 –

+3

@MarcZilla你错了。你可以绝对地将一个数组赋给一个适当大小的范围'.Value'。 –

4

我遇到了同样的问题被发现了,我打赌你收到我做同样的原因,类型不匹配。其中一个单元格包含长度大于255个字符的字符串。我无法解释为什么转置不能处理variant/string> 255,但它不能。看起来像一个Excel错误。这就是编码你自己的转置功能的原因。

+0

缩短一些字符串,然后转换工作。 – Timores