Excel VBA 2016中使用Range.Autofilter的运行时错误1004

时间:2017-12-21 11:00:39

标签: vba excel-vba excel

我的代码是

With ActiveSheet
   .AutoFilterMode = False
   .Range("23:23").AutoFilter
End With

这在Excel 2010中运行良好,但在Excel 2016中我得到: -

  

运行时错误'1004'   Range类的AutoFilter方法失败

另外,我可以手动点击功能区中的过滤器图标(在数据>过滤器下)但不能使用VBA代码执行此操作

任何想法都非常感激。

2 个答案:

答案 0 :(得分:1)

当您尝试按空行过滤时,AutoFilter会出现1004错误。尝试在行23上放置一些内容并再次过滤它:

Public Sub TestMe()    
    With ActiveSheet
       .AutoFilterMode = False
       .Range("23:23").Cells(1) = 1
       .Range("23:23").Cells(2) = 2
       .Range("23:23").AutoFilter
    End With

End Sub

如果有效,那么你只是在第23行没有值,因此无法应用自动过滤器。

通常,Excel中的AutoFilter有一些奇怪的行为。例如,如果您打开一个新的Excel文件并运行以下代码:

Public Sub TestMe()

    With ActiveSheet
       .AutoFilterMode = False
       '.Range("23:23").Cells(1) = 1
       '.Range("23:23").Cells(2) = 2
       .Range("23:23").AutoFilter
    End With    
End Sub

它会给你1004错误。我们把这个时间称为动力 FirstTime

然后,如果您取消注释这两个范围并运行它,则会出现AutoFilter

现在奇怪的部分 - 删除工作表中的所有单元格,在 FirstTime 中注释回两个范围,它看起来就像它的样子。但是如果你运行代码,它会在空的第23行放置一个AutoFilter而没有问题。

答案 1 :(得分:0)

删除现有文件管理器,然后再次运行