Сортировка области по конкретному столбцу - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь создать функцию, которая будет вводить:
i) рабочий лист
ii) область сортировки
iii) заголовок столбца сортировки (где в этом столбце есть даты).

Код затем сортирует область в порядке возрастания.

Function sortArea(Sheet As Worksheet, sortingArea As Range, sortingColHeader As Range) As Range

With Sheet.sort
    .SortFields.Add Key:=Range(sortingColHeader), Order:=xlAscending
    .SetRange Range(sortingArea)
    .Header = xlYes
    .Apply
End With

End Function

Когда я пишу, в моей основной подпрограмме:

Call sortArea(Sheets(2), Range("A16:AP45"), Range("I14"))

Я получаю:

«Ошибка времени выполнения 1004 Метод диапазона объекта Global fail»

в первой строке блока With:

.SortFields.Add Key:=Range(sortingColHeader), Order:=xlAscending

1 Ответ

0 голосов
/ 03 февраля 2019

Изучите различия:

Option Explicit

Sub sortArea(ws As Worksheet, sortingArea As Range, sortingColHeader As Range)

With ws.Sort
    .SortFields.Clear
    .SortFields.Add Key:=sortingColHeader, Order:=xlDescending
    .SetRange sortingArea
    .Header = xlYes
    .Apply
End With

End Sub

Sub tester()
Call sortArea(Sheets(2), Range("b1:c10"), Range("b1:b10"))
End Sub
  • Используйте Sub вместо Function.Вы хотите действовать на рабочем листе.В общем случае функции возвращают результат вызывающей стороне.
  • Ключ сортировки описывается как диапазон, представляющий весь столбец, а не как одну ячейку.
  • Синтаксис Range(Range) неимеет смысл.
  • игнорировать изменение параметра order, которое было только для тестирования

  • Обратите внимание на .SortFields.Clearв противном случае вы просто продолжаете добавлять SortFields каждый раз при запуске макроса

Для документации рассмотрите возможность изменения sortingColHeader на sortingColRange

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