Макрос для копирования с одного листа на другой и сортировки по возрастанию - PullRequest
0 голосов
/ 23 мая 2018

У меня есть формула массива на листе «Сведения о доступе сотрудника».(Значения находятся в столбцах от A до D, а формула массива расширяется до строки 1530).

Я хочу скопировать значения на другой лист с именем «Организация доступа сотрудника» и вставить в качестве значений, а затем отсортировать по возрастанию в соответствии со столбцом 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 голосов
/ 24 мая 2018

Ваш код для копирования / вставки / сортировки кажется достаточно эффективным, я не думаю, что это является причиной вашего отставания.Я подозреваю, что Activeworkbook.RefreshAll может быть проблемой - попробуйте закомментировать это, чтобы увидеть, улучшается ли производительность.

Копирование / вставка / сортировка может замедлить процесс, потому что такая операция взаимодействует с электронной таблицей, а также с чтением / записью / обновлениемтребует вычислительной мощности.Попробуйте следующее:

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

` Your code here

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...