Скорее всего, он не работает, потому что вы пропускаете лист, который не является активным листом, не активируете его и пытаетесь отсортировать. Вот ссылка на описание вашей проблемы: Начало VBA: выберите и активируйте . Короче говоря, никогда не используйте .Select или .Selection, если только вы не хотите, чтобы ваш пользователь мог запускать код при выборе по своему выбору. Даже тогда еще не всегда отличная идея. Вот ваш саб переписан в одну строку:
Public Sub sortSelectionByDate(ByRef wrksheet As Worksheet, ByVal fromRow As Integer, ByVal toRow As Integer)
wrksheet.Rows(fromRow & ":" & toRow - 1).Sort Key1:=wrkSheet.Range("A9"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Важные изменения:
- Нет необходимости использовать. Выбрать. Если вы хотите использовать его, сначала вам нужно использовать wrkSheet.Activate.
- Измените Key1: = Range ("A9") на Key1: = wrkSheet.Range ("A9"). Всегда помогает быть явным при работе с ячейками / диапазонами.
- Оператор With не требуется, поскольку вы запускаете только один метод.