Сообщение об ошибке Ошибка времени выполнения 1004 Ошибка метода автофильтра или класса диапазона - PullRequest
1 голос
/ 01 февраля 2020

Я пытаюсь создать фильтр для столбца C, который отображает все значения, кроме значения a90.

enter image description here

Я получаю сообщение об ошибке:

Ошибка времени выполнения 1004
Ошибка метода автофильтрации класса диапазона

Ошибка поступает из этой строки:

ActiveWorkbook.ActiveSheet.Range("$A$4:$C$1300").AutoFilter Field:=3, Criteria1:="<>*a90*" _
        , Operator:=xlAnd
Sub classificationfilterwithoutvaluea90 ()
Range("C6").Select
Selection.AutoFilter
ActiveWorkbook.ActiveSheet.Range("$A$4:$C$1300").AutoFilter Field:=3, Criteria1:="<>*a90*" _
        , Operator:=xlAnd
End Sub

Мои данные в столбце C не являются частью сводной таблицы, тогда как мои данные в столбцах A и B являются частью сводной таблицы.

1 Ответ

0 голосов
/ 01 февраля 2020

Я проверил это, и я думаю, что это то, что вы хотите, или, по крайней мере, это должно помочь вам получить то, что вы хотите.

Несколько вещей, которые нужно отметить, хотя и ранее. Эти строки не нужны:

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

Надеюсь, это поможет

...