慢速VBA循环 - 从Recordset粘贴

时间:2017-02-17 23:28:14

标签: excel vba excel-vba

我正在使用循环而不是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

2 个答案:

答案 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