2014-04-26 148 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