Сортировка Excel-VBA не работает - PullRequest
0 голосов
/ 15 сентября 2011

У меня проблема с функцией сортировки.Не работаетЕсли я записываю макрос во время сортировки вручную, запись выглядит как моя.Саб выглядит следующим образом:

Public Sub sortSelectionByDate(ByRef wrksheet As Worksheet, ByVal fromRow As Integer, ByVal toRow As Integer)
    'debug
    toRow = toRow - 1
    wrksheet.Select
    wrksheet.Rows(fromRow & ":" & toRow).Select
    With Selection
        .Sort Key1:=Range("A9"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    End With
End Sub

Заранее спасибо ....

Кристоф

1 Ответ

2 голосов
/ 16 сентября 2011

Скорее всего, он не работает, потому что вы пропускаете лист, который не является активным листом, не активируете его и пытаетесь отсортировать. Вот ссылка на описание вашей проблемы: Начало 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 не требуется, поскольку вы запускаете только один метод.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...