Почему после многоуровневой сортировки появляются пустые строки? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть макрос, который сортирует по цвету, затем по дате, затем снова по дате.

Если я удаляю дату, а не просто повторную сортировку, она сортирует, а затем оставляет пустые строки там, гдестрока, из которой была удалена дата.Я попытался добавить еще один слой сортировки, где я сортирую по цвету RGB (0,0,0).

  1. Почему там находятся пустые строки?
  2. Как их удалить или сделатьони вообще не появляются?
If Not Intersect(Target, Range("A:C")) Is Nothing Then
    MsgBox ("sorting")

    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add(Range("C:C"), _
        xlSortOnCellColor, _
        xlDescending, _
        , _
        xlSortNormal).SortOnValue.Color = RGB(146, 208, 80)

    ActiveSheet.Sort.SortFields.Add2 Key:=Range("C:C"), _
        SortOn:=xlSortOnValues, _
        Order:=xlDescending, _
        DataOption:=xlSortNormal

   ActiveSheet.Sort.SortFields.Add2 Key:=Range("B:B"), _
        SortOn:=xlSortOnValues, _
        Order:=xlDescending, _
        DataOption:=xlSortNormal

   ActiveSheet.Sort.SortFields.Add2(Range("C:C"), _
        xlSortOnCellColor, _
        xlDescending, _
        , _
        xlSortNormal).SortOnValue.Color = RGB(255, 255, 255)

    With ActiveSheet.Sort
        .SetRange Range("A:C")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End If

enter image description here

enter image description here

1 Ответ

1 голос
/ 23 мая 2019

Полагаю, у меня могут быть ответы на ваши вопросы, по крайней мере, на второй, я уверен ...

Почему там стоят пустые строки?

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

Как их удалить или вообще не отображать?

Пожалуйста, попробуйтекод, который я настроил на основе ваших данных и код, который вы предоставили:

If Not Intersect(Target, Range("A:C")) Is Nothing Then
    MsgBox ("sorting")

With ActiveWorkbook.ActiveSheet
    lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '<-- get last row of data in column "A"
    .Sort.SortFields.Clear

    .Sort.SortFields.Add(Range("C1:C" & lastRow), _
    xlSortOnCellColor, xlDescending, , xlSortNormal).SortOnValue.Color = RGB(146, 208, 80)

    .Sort.SortFields.Add Key:=.Range("B1:B" & lastRow), _
                        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

    .Sort.SortFields.Add Key:=.Range("C1:C" & lastRow), _
                        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

    .Sort.SortFields.Add(Range("C1:C" & lastRow), _
                        SortOn:=xlSortOnCellColor, Order:=xlDescending, DataOption:=xlSortNormal).SortOnValue.Color = RGB(255, 255, 255)

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

End If

Основная настройка - это объявление lastRow, которое настраивает нижнюю часть диапазона данных (в вашей ситуации это не имеет значения, но иногда вы можетевстречаются данные, где вы хотите отсортировать до определенной строки, и это будет очень полезно. Также lastRow, как определено здесь, очень полезно для многих других макросов и помогает динамически устанавливать диапазоны).

И у меня также естьдобавил начальные данные, как вы можете видеть в Range("C1:C" & lastRow)

Я проверил это на предоставленных вами образцах данных, и они работали, как ожидалось.Я надеюсь, что это сработает для вас именно так, как вы хотели.

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