Excel 加快跨多张图纸VBA的复制/粘贴速度

Excel 加快跨多张图纸VBA的复制/粘贴速度,excel,vba,Excel,Vba,我已经成功地编写了运行的代码,但速度相当慢(大约需要2分钟,块大小很快就会增加52)。我想知道是否有更好的方法来实现这一小部分代码。代码同时选择10张图纸,以便复制和粘贴将影响所有10张图纸。正如你所看到的,我唯一能进行的复制和粘贴是绝对最差的版本,因为我尝试的所有其他选项都只是将范围粘贴到一张纸上,而不是全部粘贴到10张纸上。我很想知道是否有可能做得更好。我必须激活第一张工作表并执行完整的范围。复制,范围。选择,活动表。粘贴!varray包含10个工作表名称,MaxRngLive为20,Rng

我已经成功地编写了运行的代码,但速度相当慢(大约需要2分钟,块大小很快就会增加52)。我想知道是否有更好的方法来实现这一小部分代码。代码同时选择10张图纸,以便复制和粘贴将影响所有10张图纸。正如你所看到的,我唯一能进行的复制和粘贴是绝对最差的版本,因为我尝试的所有其他选项都只是将范围粘贴到一张纸上,而不是全部粘贴到10张纸上。我很想知道是否有可能做得更好。我必须激活第一张工作表并执行完整的范围。复制,范围。选择,活动表。粘贴!varray包含10个工作表名称,MaxRngLive为20,RngLiveRange是一个包含活动公式的156列的一维数组,RngPasteRange是一个156x156块,这些公式将粘贴到其中。在后面的代码中,我计算出每个块中除顶行以外的所有单元格的值(再次使用range.pasteValues!),从而将文件大小总体减少约75%

Sheets(varray).Select

Sheets("c_DAZN.com_GF").Activate

Set ws2 = wb.Worksheets(varray(0))


For j = 1 To MaxRngLive
      
    Application.StatusBar = ws2.Name & " " & j
      
    Set RngLiveRange = ws2.Range(Range(RngLiveName).Rows(j))
    Set RngPasteRange = ws2.Range(Range(RngPasteName).Rows(j))
    RngLiveRange.Copy
    RngPasteRange.Select
    ActiveSheet.Paste
    
Next j

非常感谢大家

这应该是你想要的。我假设你的目的地清单是一个字符串

Function copyRange(sourceRange As Variant, destRange As String, wks as String)
    arr = Split(wks, ",")
    For Each i In arr
        Worksheets(i).Range(destRange) = sourceRange.Formula
    Next i
End Function

Sub test()
wk = "Sheet1,Sheet2,Sheet3" 'Comma separated list of destination sheets
'Tested by selecting the range to be copied, you can define your source range however you want
Call copyRange(Selection, Selection.Address, wk)
End Sub

难道你不能复制并粘贴整个范围,而不是一行一行地粘贴吗?它确实一次粘贴所有区域,但粘贴目标块是156 x 156,由几行分隔,因此循环就是这样做的-通过所有20个块。RngPasteRange是一个156x156 2d数组,从例如af70、af300、af700、af1000等开始。我可能需要上传更多代码,以便更容易理解问题。此外,在我的测试中,目标范围与源范围相同,但您可以输入您需要的任何目标范围,这将非常有用,但我不能使用“.Formula”方法,因为它在我的偏移量和索引公式中加载了“@”,然后它们就停止工作了。我最初是用range=range.Formula一次循环一张纸来写的,但它比我当前的版本慢得多,因为它只包含20个循环,而不是200个(20 x 10张)。我真的只是想知道是否有可能有一个复制/粘贴方法,如range=range.value,它可以同时应用于多张工作表,每个工作表中的相同范围。这将是最快的选择,我想哦,谢谢你的回答!假设你的公式位于同一工作表中的源工作表引用位置,你会这样做吗你想让你的目的地公式在每个目的地工作表上引用这些相同的位置或它们对应的位置吗?例如,如果我的源代码中有一个引用A1的公式,我想每个目的地公式在各自的工作表上都引用A1吗?我想我理解你的意思,答案是肯定的。复制范围将是例如af1:ge1,目标范围将是af1:ge156。源范围始终是1行乘156列,目标范围始终是156 x 156,目标的第一行与源范围相同。