необходим код для использования автофильтра с переменным диапазоном строк - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь автофильтровать данные на листе с 7 столбцами перед копированием в другую книгу. Это должно использоваться для разных данных, каждый раз с разным количеством строк. Проблема заключается в том, что когда он автофильтрует данные, он записывает количество строк, которое каждый раз отличается (см. Range («B1: B124»)) ниже, которое затем будет применено при следующем использовании

ChDir "F:\Work-Macro"
Workbooks.Open Filename:="F:\Work-Macro\usage.xls"
  Cells.Select
With Selection.Font
    .Name = "Calibri"
    .Size = 10
End With
Range("D:E,I:L").Select
Range("I1").Activate
Selection.Delete Shift:=xlToLeft
Columns("A:F").Select
Range("F1").Activate
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add2 Key:= _
    Range("B1:B124"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

должен быть способ динамического применения автофильтра без записи количества отфильтрованных строк

1 Ответ

0 голосов
/ 24 июня 2019

Вместо использования фиксированного диапазона вы хотите узнать последнюю используемую ячейку:

Range("B2:B" & ActiveWorkbook.sheets("Sheet1").cells(rows.count,2).end(xlup).row)

Часть ActiveWorkbook.sheets("Sheet1").cells(rows.count,2).end(xlup).row) вернет последнюю использованную строку в столбце 2.

Кстати, я предлагаю вам очистить свой код после записи. Использование Select и Activate почти никогда не требуется в макросе. Он замедляет ваш код и очень чувствителен к ошибкам.

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