Глядя на ваш текущий вопрос и объяснение, я думаю, что, должно быть, добавлено 3
в ваш код:
Если вы установите диапазон:
LastRow = btsvoice.Range("M" & btsvoice.Rows.Count).End(xlUp).Row
Set rng = btsvoice.Range("M2:M" & LastRow)
Вы не можетеиндекс до Field:=13
, поскольку он просто отсутствует в диапазоне 1 столбца. Вместо этого используйте Field:=1
.
Однако, некоторые другие указатели, которые нужно сделать, это то, что, поскольку у вас есть заголовки, может быть даже лучше использовать Offset
, чтобы ваш код выглядел следующим образом:
Dim rng As Range
LastRow = btsvoice.Range("M" & btsvoice.Rows.Count).End(xlUp).Row
Set rng = btsvoice.Range("M1:M" & LastRow)
With rng
.AutoFilter Field:=1, Criteria1:=">30"
.Offset(1,0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter Field:=1, Criteria1:=">0"
End With
Еще одна вещь, которую я могу себе представить: описанная ошибка также будет выдана, когда AutoFilter
уже применен к одному столбцу, а вы хотите AutoFilter
к другому столбцу. Это означает, что у вас есть два варианта:
- Удалить
AutoFilter
перед применением другого фильтра - Применить фильтр к полному диапазону вместо отдельных столбцов
Для первого варианта вы можете попробовать:
With Sheet1
If .AutoFilterMode = True Then .AutoFilterMode = False
End with
Для второго варианта вам нужно установить диапазон в столбец A: M (или даже дальше)
Set rng = btsvoice.Range("A2:M" & LastRow)