Я проверил это, и я думаю, что это то, что вы хотите, или, по крайней мере, это должно помочь вам получить то, что вы хотите.
Несколько вещей, которые нужно отметить, хотя и ранее. Эти строки не нужны:
Range("C6").Select
Selection.AutoFilter
Во-первых, вы не должны позволять VBA неявно решать, какой диапазон, в каком листе, в какой книге вы хотите использовать. В данном случае кажется, что вы пытаетесь получить значение ячейки C6 для последующего использования, поэтому для этого я бы сделал что-то вроде этого.
Dim ws As Worksheet
Dim myVal As String
'pick whichever worksheet you want to work with, i'm just choosing at random here
Set ws = ThisWorkbook.Worksheets(1)
'assigns the value of cell C6 to myVal. CStr() is casting whatever value is in C6 to a string
myVal = CStr(ws.Cells(6,3))
Как я уже говорил ранее, вы не на самом деле вам не нужно, чтобы VBA решал, какими будут эти переменные для вас, поэтому вы должны явно установить их.
ActiveWorkbook.ActiveSheet.Range("$A$4:$C$1300")
Использование переменных Active
обычно приводит к тому, что вы сами стреляете в ногу. В этом случае, так как вы работаете с 1 книгой, переменной ThisWorkbook
достаточно, потому что - я думаю - она указывает рабочую книгу, которая выполняет код, но вы должны также указать рабочую таблицу, с которой вы хотите работать .
Вот код, который я тестировал:
Option Explicit
Public Sub classificationfilterwithoutvaluea90()
Dim thisws As Worksheet
Dim filterArea As Range
Const filterCrit As String = "<>a90"
'idk which worksheet you want, so I just picked one
Set thisws = ThisWorkbook.Worksheets(1)
'This works as an alternative as well
'Set thisws = ThisWorkbook.Worksheets("Sheet1")
'setting the range to be filtered
Set filterArea = thisws.Range("A4:C1300")
filterArea.AutoFilter _
Field:=1, _
Criteria1:=filterCrit, _
Operator:=xlFilterValues
End Sub
Надеюсь, это поможет