要从一个工作表复制到另一个工作表并按升序排序的宏

时间:2018-05-23 18:35:52

标签: arrays excel excel-vba sorting copy-paste vba

我在工作表“员工访问详细信息”中有一个数组公式。 (值从列A到D,数组公式扩展到行1530)。

我想将值复制到名为“Employee Access Arranged”的另一个工作表并粘贴为值,然后根据C列进行升序排序。我有一个有效的代码,如下所示: -

    Private Sub CommandButton1_Click()

     ActiveWorkbook.RefreshAll

     Sheets("Employee Access Arranged").Range("A2:D" & Sheets("Employee 
     Access Arranged").Range("A" & Rows.Count).End(xlUp).Row).ClearContents

     With Sheets("Employee Access Detail")
    .Range(.Range("A4"), .Cells(.Rows.Count, "D").End(xlUp)).Copy
     End With

    With Sheets("Employee Access Arranged")
    .Cells(.Rows.Count, "A").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
    End With

    Application.CutCopyMode = False

    Range("C2").CurrentRegion.Select
    Selection.Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal

    Worksheets("Employee Access Arranged").Activate
    Range("A2").Activate

     End Sub

现在,只是为了粘贴这些值并安排升序,这段代码需要几分钟,因为这必须多次完成,效率不高。

如果有一种方法可以提高效率,我将不胜感激。我认为问题在于我如何复制价值观。

提前感谢您的帮助。欣赏它。

1 个答案:

答案 0 :(得分:0)

您的复制/粘贴/排序代码似乎足够有效,我认为这不是导致延迟的原因。我怀疑Activeworkbook.RefreshAll可能是问题 - 尝试将其评论以查看性能是否有所改善。

复制/粘贴/排序可能会降低流程速度,因为此类操作会与电子表格进行交互,并且读取/写入/更新需要处理能力。请尝试以下方法:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

` Your code here

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True