VBA转置types不匹配错误

我一直在尝试调换一个数组来将ADODB.recordset中的logging粘贴到excel行中。 (logging存储在2D Variant数组中)。 但是,每当我尝试像下面的代码的第一行,我得到一个13:types不匹配的错误代码。 因此,我试图深入了解错误所在,并构build了一个简单的整数2d数组。 看来转置function不能做这个转换或者不抛出13错误代码。 在线研究似乎表明,这个错误是由于转置元素的数量超过了64k而造成的,但是这个数字不能超过64k。 有什么想法吗?

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 

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

 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是正确的,删除​​“设置”关键字完全解决了这个问题。

第二编辑:以下适用于我:

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

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

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

虽然我没有使用“设置”,我有错误13. MarcZilla解决scheme为我工作,即使转置非常大的数组也非常快。 我的Excel 2010版本有内在限制他们可以在https://support.microsoft.com/en-us/kb/177991?wa=wsignin1.0上find