сортировать несколько столбцов Excel VBA - PullRequest
0 голосов
/ 03 октября 2018

это мой код

Sub SortMultipleColumns(myline As String)

    With Worksheets("Result-Inactive").Sort
        .SortFields.Add Key:=Range("A1"), Order:=xlAscending
        .SortFields.Add Key:=Range("D1"), Order:=xlAscending
        .SortFields.Add Key:=Range("J1"), Order:=xlAscending
        .SetRange Range("A1:C" & myline)
        .Header = xlYes
        .Apply
    End With

End Sub

Я получаю следующую ошибку, и я не понимаю, почему «Ошибка времени выполнения« 1004 »ссылка на сортировку недопустима. Убедитесь, что она находится внутри требуемого дня.сортировать, а затем сначала сортировать по ящикам не то же самое или пусто. когда я нажимаю отладку. .apply получает выделение

какие-либо предложения?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Просто повторим ответ Джипеда здесь, но с несколько иным взятием:

1) myline действительно должно быть определено как Long или Integer

2) Диапазоны, объявленные с Key:=Range("A1")должен быть определен как тот же самый рабочий лист

3) Клавиши для D и J находятся за пределами .setRange, который также должен быть определен как находящийся на том же рабочем листе также

Я придерживался того же кода, но добавил определение ws листа для всех диапазонов и изменил ваш установленный диапазон, включив в него столбец J

Sub SortMultipleColumns(myline As Long)

Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Result-Inactive")

    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("A1"), Order:=xlAscending
        .SortFields.Add Key:=ws.Range("D1"), Order:=xlAscending
        .SortFields.Add Key:=ws.Range("J1"), Order:=xlAscending
        .SetRange ws.Range("A1:J" & myline)
        .Header = xlYes
        .Apply
    End With

End Sub

Я предполагаю mylineпотому что иногда вы хотите отсортировать только верхний набор данных.Я также добавил строку к clear всем полям сортировки, на случай, если вы запустите на этом листе много разных сортировщиков.

0 голосов
/ 03 октября 2018

Вы пытаетесь включить столбцы D и J в качестве вторичных критериев сортировки, но исключаете их из отсортированного диапазона.Кроме того, Range("xn") не обязательно принадлежит к листу Result-Inactive без синтаксиса как .Range("xn"). Попробуйте альтернативную сортировку VBA вместо метода, созданного устройством записи «macro».

Sub SortMultipleColumns()

    With Worksheets("Result-Inactive")
        with .cells(1, "A").currentregion
            .Cells.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
                        Key2:=.Range("D1"), Order2:=xlAscending, _
                        Key3:=.Range("J1"), Order3:=xlAscending, _
                        Orientation:=xlTopToBottom, Header:=xlYes
        end with
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...