VBA Help: Настройка автоматического запуска VBA с динамическим диапазоном - PullRequest
0 голосов
/ 09 ноября 2019

Итак, у меня есть данные в следующем формате: Фондовые данные

«31-Мар-18» - это ввод вручную, и когда там вводится дата, я пытаюсьиметь функцию, которая сортировала бы в порядке убывания соответствующий столбец с таким же заголовком, как ячейка входных данных. Так, например, если ячейка ввода '31 -Mar-18 ', то данные должны быть отсортированы по убыванию значений в столбце с заголовком '31 -Mar-18'.

Iиграл с этим кодом, но, учитывая мои ограниченные знания, не знал, как поступить. Любой вклад будет высоко ценится.

Sub SortDataWithHeader()
Range("DataRange").Sort Key1:=Range("B15"), Order1:=xlDescending

End Sub

1 Ответ

0 голосов
/ 10 ноября 2019

Похоже, вы неправильно поняли использование свойства key1. Обратитесь к этой ссылке для более подробной информации. Ключ key1 должен содержать все значения для сортировки (например, в объекте диапазона), а не имя столбца.

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

Какой код в том, что он ищет дату в ячейке B15 и пытается найти ячейку, в которой она содержится в строке 17. Затем он берет эту ячейку и расширяет ее до конца, чтобы определитьклетки для сортировки. Он использует autofilter.sort вместо range.sort, потому что из того, что я вижу в вашем опубликованном изображении, вы уже применили автофильтр.

Option Explicit

Public Sub sSort()

  Dim headerColumn As Range, headers As Range, foundRange As Range, sortItems As Range
  Dim headerColumnNumber As Long
  Dim lookupValue As Variant

  lookupValue = Sheet1.Range("B15").Value
  Set headers = Sheet1.Range("17:17")
  Set foundRange = headers.Find(lookupValue, LookIn:=xlValues)

  Set sortItems = Range(foundRange.Offset(1, 0), foundRange.End(xlDown))

  Sheet1.AutoFilter.Sort.SortFields.Clear
  Sheet1.AutoFilter.Sort.SortFields.Add Key:=sortItems, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

  With Sheet1.AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With

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