如何减少以下VB代码的时序

问题描述 投票:0回答:1
For i = 1 To 200
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Change Add Remove Contact Info").Range("B2").Copy Destination:=Sheets("Working").Range("A1")
Sheets("Change Add Remove Contact Info").Range("C7").Copy Destination:=Sheets("Working").Range("B1")
Sheets("Change Add Remove Contact Info").Range("C10").Copy Destination:=Sheets("Working").Range("C1")
Sheets("Change Add Remove Contact Info").Range("C11").Copy Destination:=Sheets("Working").Range("D1")
Sheets("Change Add Remove Contact Info").Range("C12").Copy Destination:=Sheets("Working").Range("E1")
Sheets("Change Add Remove Contact Info").Range("C13").Copy Destination:=Sheets("Working").Range("F1")
Sheets("Change Add Remove Contact Info").Range("C14").Copy Destination:=Sheets("Working").Range("G1")
Sheets("Change Add Remove Contact Info").Range("D17").Copy Destination:=Sheets("Working").Range("H1")
Sheets("Change Add Remove Contact Info").Range("C20").Copy Destination:=Sheets("Working").Range("I1")
Sheets("Change Add Remove Contact Info").Range("C21").Copy Destination:=Sheets("Working").Range("J1")
Sheets("Change Add Remove Contact Info").Range("C22").Copy Destination:=Sheets("Working").Range("K1")
Sheets("working").Range("A1:K1").Copy
Sheets("Data").Range("A" & rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Sheets("Change Add Remove Contact Info").Range("A:F").EntireColumn.Delete
Sheets("Data").Select
Range("A1").Select
Application.ScreenUpdating = False
Next i

我正在尝试将多个单元格从一个表格复制粘贴到另一个电子表格。但宏需要大量时间来运行后台。

excel vba
1个回答
0
投票

试试这个代码:

Sub TestCopy()
    Dim src As Worksheet, dest As Worksheet
    Set src = Sheets("Change Add Remove Contact Info")
    Set dest = Sheets("Data")
    
    Dim A As Variant, rng As Range
    Set rng = src.Range("B2,C7,C10:C14,D17,C20:C22")
    ReDim A(1 To rng.Count)
    
    Dim last As Long
    last = dest.Range("A" & Rows.Count).End(xlUp).Row
    
    Dim B As Variant
    ReDim B(1 To 200)
    Dim i As Long, j As Long, c As Range
    For i = 1 To 200
        If i > 1 Then Set rng = rng.Offset(, 6)
        j = 0
        For Each c In rng
            j = j + 1
            A(j) = c.Value
        Next c
        B(i) = A
    Next i
    dest.Range("A" & last + 1).Resize(200, rng.Count) = Application.Index(B, 0)
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.