【问题标题】:Error message Run time error 1004 Autofilter method or range class failed错误消息 运行时错误 1004 自动筛选方法或范围类失败
【发布时间】:2020-03-23 14:13:20
【问题描述】:

我正在尝试在 C 列上创建一个过滤器,它显示除值 a90 之外的所有值。

我收到错误消息:

运行时错误 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 列中的数据是数据透视表的一部分。

【问题讨论】:

  • 其实再看你的帖子,你是过滤"&lt;&gt;*a90*"还是"&lt;&gt;a90"?他们做不同的事情,而您发布了与此相关的相互矛盾的信息。

标签: excel vba autofilter


【解决方案1】:

我对此进行了测试,我认为这是您想要的,或者至少它应该有助于获得您想要的。

之前需要注意的几件事。这些行是不必要的:

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

希望对你有帮助

【讨论】:

  • 非常感谢 Jcrizk,我测试了您的解决方案效果很好......
猜你喜欢
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多