Функция сортировки Excel VBA неправильно сортирует один столбец

#excel #vba #sorting

Вопрос:

Я использую следующий код для сортировки 5 столбцов с различными объемами данных на основе строки в столбце 1:

 Private Sub SortFields()
   Dim xlWS as Excel.Worksheet
   Set xlWS = ActiveWorkbook.Worksheets("Sheet1")

   xlWS.sort.SortFields.Clear
   xlWS.sort.SortFields.Add Key:=xlWS.Range("B6:B22"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

   With xlWS.sort
      .SetRange xlWS.Range("B6:F22")
      .Header = xlGuess
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
   End With
End Sub
 

Типы данных столбцов этот метод сортирует по порядку: числа, обрабатываемые как строки (например, 10-100-02), дата, другая дата, строка, представляющая цвет (обычно зеленый, желтый, красный), и строка. Все правильно сортируется по столбцам, за исключением столбца цвета. Строки данных цветового столбца переворачиваются сверху вниз при каждом запуске метода. Например, если необходимо отсортировать 4 строки данных и цвет нижней строки желтый, при запуске метода сортировки желтый цвет переместится в верхнюю строку, несмотря на правильную сортировку всех других данных, и снова вернется к нормальному состоянию, если сортировка будет выполнена во второй раз.

Это не самая большая проблема, так как вы можете просто запустить метод дважды, чтобы сортировка выглядела правильно, но есть ли хорошее решение, помимо простого запуска метода дважды каждый раз, когда мне нужно сортировать данные?

Комментарии:

1. Если ваш диапазон B6:F22 не включает заголовки, попробуйте .Header = xlNo