Макрос Excel для выполнения сортировки по нескольким столбцам - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать макрос в Excel, который будет сортировать таблицы по столбцам A, C и F. Я нашел информацию в Интернете, чтобы начать работу. Ниже приведен код. Проблема, с которой я столкнулся, заключается в том, что таблица будет содержать разное количество строк каждый день. (Столбцы всегда будут одинаковыми, но количество строк изменится). Приведенный ниже скрипт будет сортировать мои данные до тех пор, пока электронная таблица не содержит более 9999 строк (включая заголовки столбцов). Если у меня есть 10000 или более строк, макрос не выполняется.

Как мне обновить приведенный ниже код, чтобы он мог работать независимо от количества строк? Мы будем благодарны за любую помощь, которую вы можете оказать. Спасибо

Sub Multi_Sort()
'
' Multi_Sort Macro
'
Dim lngLast As Long
lngLast = Range("A" & Rows.Count).End(xlUp).Row

With Worksheets("Sheet1").Sort
    .SortFields.Clear
    .SortFields.Add Key:=Range("A1:A1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("C1:C1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("F1:F1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    .SetRange Range("A1:F" & lngLast)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End Sub

1 Ответ

0 голосов
/ 30 апреля 2018

Я не могу воспроизвести вашу ошибку в Excel 2013, но, полагаю, проблема заключается в дополнительном значении «1» в ваших назначениях диапазонов (т. Е. Измените =Range("A1:A1" & lngLast) на =Range("A1:A" & lngLast) и т. Д.).

Кроме того, хорошей практикой было бы явное указание в вызовах диапазона (включая рабочий лист).

Sub Multi_Sort()

Dim lngLast As Long
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Sheet1")
lngLast = ws.Range("A" & .Rows.Count).End(xlUp).Row

With .Sort
    .SortFields.Clear
    .SortFields.Add Key:=ws.Range("A1:A" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=ws.Range("C1:C" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=ws.Range("F1:F" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    .SetRange ws.Range("A1:F" & lngLast)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...