运行时错误:Range AutoFilter上为“ 1004”

时间:2019-09-09 15:37:04

标签: excel vba

我想用VBA做什么-用数组过滤表并删除行。 我的数组有4个元素(在一个循环中更改为5个不同的集合)。被过滤的列有5个元素。我只想得到1。这是一个循环,它将创建5个报告,每个报告根据第29列针对不同的元素进行过滤。

如果在调试模式下,我尝试手动过滤该列,然后跳过该行,则在尝试再次清除所有过滤器时,我在下面有第二行相同的错误5行。

这是788部分中的第765和770行。其他所有操作均正常进行。

FilterOutArray-具有4个元素的数组(每个变量/字符串)。第29列有5个不同的值,没有空格

我尝试用字符串引用“ Criteria1”,以查看过滤一个元素是否有效,但是不行。

'Run-time error: '1004' on row below
ActiveSheet.Range(Cells(1, 1).Cells(29, LastRow)).AutoFilter Field:=29, Criteria1:=FilterOutArray, Operator:=xlFilterValues

Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

'Run-time error: '1004' on row below
ActiveSheet.Range(Cells(1, 1).Cells(29, 9999)).AutoFilter Field:=29

1 个答案:

答案 0 :(得分:6)

在此行:

ActiveSheet.Range(Cells(1, 1).Cells(29, LastRow)) ...

应该是逗号,而不是点。像这样:

ActiveSheet.Range(Cells(1, 1), Cells(29, LastRow)) ...

“有趣”的部分是这样的:Cells(1,1),Cells(2,2).Address是有效的语法,给出了对应单元格的地址,右1列,下1列,例如B2

总而言之,请考虑使用How to avoid using Select in Excel VBA。而写由2个单元格定义的范围的“正确”方法是这样的:

With Worksheets(1)
    Set myRange = .Range(.Cells(1, 1), .Cells(5, 5))
End With