excel 防止VBA While循环逐渐变慢

1zmg4dgp  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(142)

循环复制格式化的代码段并插入它们x次。做不到10次是快的,但它很快开始慢下来的地步,在大约60左右,它需要大约一秒钟的每一个插入,并继续从那里慢下来。是什么导致它逐渐变慢?

While x < num
    Debug.Print ("Running: " & x)
    With Sheets(inoc)
    .Activate
    .Rows("12:15").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    End With
    With Sheets(count)
    .Activate
    .Rows("17:28").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    .Range("C29").Value = "='Inoculation and Incubation'!B17"
    End With
    x = x + 1
    Application.CutCopyMode = False
    
Wend
h5qlskok

h5qlskok1#

来自评论:
Avoid using .Activate and .Select
While... Wend通常被认为已弃用。

Dim i As Long
For i = x to num
    Debug.Print "Running: " & i
    With Sheets(inoc).Rows("12:15")
        .Copy
        .Insert Shift:=xlDown
    End With

    With Sheets(count).Rows("17:28").
        .Copy
        .Insert Shift:=xlDown    
    End With

    Sheets(count).Range("C29").Value = "='Inoculation and Incubation'!B17"

    Application.CutCopyMode = False
    
Next i

为什么会越来越慢:
任何时候一个刺穿墙之间的vba和工作表,它会慢一点。这种缓慢确实开始在循环中复合。对于您正在尝试做的事情(复制/插入),我们无法做更多的事情来使其更快,或者克服复合缓慢。这可能与excel必须在每个循环中重绘xml的事实有关,并且在将信息存储在内存中然后重绘xml时需要处理的数据越来越多。

相关问题