我正在使用循环而不是copyfromrecordset用于两个列,因为某些未知原因而破坏了copyfromrecordset。当我循环使用它时,需要花费2分钟来完成800行,这看起来非常慢。 Copyfromrecordset可以在不到20秒的时间内输入800行,列数为10倍。任何人都可以告诉是什么让循环如此缓慢?
Set rng = Activesheet.Range("P2")
Row = 0
Do While Not Rs1.EOF
For col = 0 To Rs1.Fields.Count - 1
rng.Offset(Row, col).Value = Rs1(col)
Next col
Row = Row + 1
Rs1.MoveNext
Loop
答案 0 :(得分:1)
感谢@ThunderFrame,我能够解决我的问题。正如@ YowE3k所说,我的查询是一次做一件事。所以我改变代码使用.getrows。
'Pasting data Headings then Values
ArrRs1 = Rs1.GetRows
For intColIndex = 0 To Rs1.Fields.Count - 1
Range("A1").Offset(0, intColIndex).Value = Rs1.Fields(intColIndex).Name
Next
Dim PasteArray As Variant
ReDim PasteArray(1 To UBound(ArrRs1, 2), 0 To UBound(ArrRs1, 1))
For i = 1 To UBound(ArrRs1, 2)
For j = 0 To UBound(ArrRs1, 1)
PasteArray(i, j) = ArrRs1(j, i)
Next
Next
'This is pasting the data
ActiveSheet.Range("A2").Resize(UBound(PasteArray, 1) + 1, UBound(PasteArray, 2) + 1) = PasteArray
答案 1 :(得分:0)
我对copyfromrecordset没有很多经验;但是,如果每行都发生屏幕更新,您可以将其关闭,并可能看到速度有所改善。这对我以前的'Do Until'/'Loop'有帮助。
我也会关闭计算,特别是在包含大量公式的巨大电子表格中。如果代码中有Excel自动更新计算的位置,则重新计算工作簿可能会减慢速度。
application.screenupdating = false
Application.Calculation = xlCalculationManual
'your code'
application.screenupdating = true
Application.Calculation = xlCalculationAutomatic