首页 > 解决方案 > 宏在循环中复制内容需要更多时间

问题描述

我有下面的代码片段,它复制特定的行集并将其粘贴到 Excel 工作表中的另一行下。根据汽车的数量,套组副本将被更改。

B:E 列包含一些数据,H:K 列是我将在 B:E 列的最后一行复制和粘贴的内容。并且 H:K 列中的值是根据公式得出的。这些值取决于汽车数量(范围:CarCnt_counter),它有大约 18 行要复制。因此,如果汽车计数为 20,则循环执行 20 次并复制 18 行 20 次,并根据汽车计数更改值。Range CarFields 将数据保存在 H:K 列中,Rowmap_Last 范围是根据 B:E 列的最后一行编号的公式确定的

Worksheets("RowMapping").Select
ActiveSheet.DisplayPageBreaks = False
Application.ScreenUpdating = False
Dim CarCnt As Integer
Dim Total As Integer
Total = Range("CarCnt_count")

For CarCnt = 1 To Total
    Range("CarCnt_counter") = CarCnt
    Worksheets("RowMapping").Calculate
    Range("CarFields").Copy     

    Range("B" & Range("RowMap_Last").Value).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
Next CarCnt

上面是执行此操作的代码。我相信循环中的计算方法会减慢它的速度。我什至将计算移出循环给出以下代码

Application.Calculation = XlCalculationAutomatic

这仍然没有提高性能。对此的任何帮助将不胜感激。

标签: excelvba

解决方案


在循环上复制和粘贴速度较慢。尝试以下 Range.Value = Range.value 方法,而不是复制和粘贴。

Dim CarCnt As Integer
Dim Total As Integer
Application.ScreenUpdating = False
    With Worksheets("RowMapping")
        .DisplayPageBreaks = False
        Total = Range("CarCnt_count")
        For CarCnt = 1 To Total
                Range("CarCnt_counter") = CarCnt
                Range("CarFields").Value = Range("B" & Range("RowMap_Last")).Value
        Next CarCnt
    End With
Application.ScreenUpdating = True

禁用屏幕更新会提高计算速度。

Application.ScreenUpdating = False

推荐阅读