我正在運行下面的代碼以從作業表中提取資料并將其吐出,它非常慢,有什么提高速度的想法嗎?
本質上,這個回圈是從陣列(從資料庫)中提取資料
我已經完成了通常的關閉計算等,我正在尋找的是如何在不通過作業表單元格的情況下回圈,因為我認為這需要很長時間。
謝謝!
這是代碼:
Set RawDataD1WS = PnLWB.Worksheets("Raw_Data_D1")
Dim VarBunker As Variant
For i = LBound(VarBunker, 1) To UBound(VarBunker, 1)
For k = LBound(VarBunker, 1) To UBound(VarBunker, 2)
BunkerD1WS.Cells(k 2, i 1) = VarBunker(i, k)
Next k
Next i
uj5u.com熱心網友回復:
一個二維陣列GetRows是“翻轉”的(如您所知),因此將其寫入作業表的最快方法是使用函式將陣列轉置到記憶體中,然后將其放置在作業表上。您可以使用Application.Transpose(),但這確實對它可以處理的陣列的大小有限制,因此最好有自己的函式,這樣您就不必考慮這個問題。
Sub TestDrop()
Dim oConn As New ADODB.Connection, arr
Dim oRS As New ADODB.Recordset, strPath, n, ws As Worksheet
strPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath
Set oRS = oConn.Execute("select * from [TABLE1]")
arr = oRS.GetRows()
Set ws = ActiveSheet
ws.Range("I1").Resize(UBound(arr, 1) 1, UBound(arr, 2) 1).Value = arr ' "flipped"
arr = XPose(arr)
ws.Range("D1").Resize(UBound(arr, 1) 1, UBound(arr, 2) 1).Value = arr ' transposed
End Sub
'Transpose an array
Function XPose(arr)
Dim lbr As Long, ubr As Long, lbc As Long, ubc As Long, r As Long, c As Long
Dim arrOut
lbr = LBound(arr, 1)
ubr = UBound(arr, 1)
lbc = LBound(arr, 2)
ubc = UBound(arr, 2)
ReDim arrOut(lbc To ubc, lbr To ubr)
For r = lbr To ubr
For c = lbc To ubc
arrOut(c, r) = arr(r, c)
Next c
Next r
XPose = arrOut
End Function
uj5u.com熱心網友回復:
將二維陣列寫入范圍
- 如果您確定陣列是基于 0 的,則可以洗掉
LBounds. - 如果您確定陣列是基于 1 的,則可以洗掉
LBound 1s.
Set RawDataD1WS = PnLWB.Worksheets("Raw_Data_D1")
Dim VarBunker As Variant ' redim it and add some values to it
Dim rCount As Long: rCount = UBound(VarBunker, 1) - LBound(VarBunker, 1) 1
Dim cCount As Long: cCount = UBound(VarBunker, 2) - LBound(VarBunker, 2) 1
BunkerD1WS.Range("A2").Resize(rCount, cCount).Value = VarBunker
uj5u.com熱心網友回復:
不要用戶陣列。 陣列有范圍的限制。您不能將 10000 行插入到陣列中。而是執行以下操作:
Application.ScreenUpdating=false
Application.Calculate=XlCalculation.xlCalculationManual
Sheet1.EnableCalculation=False
' Your code
' ...
' Restore to defaults after processing
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411448.html
標籤:
