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

Bar*_*ski 3 excel vba

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

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

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

FilterOutArray-具有4个元素的数组(每个元素为Variant / String)。第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
Run Code Online (Sandbox Code Playgroud)

Vit*_*ata 6

在该行中:

ActiveSheet.Range(Cells(1, 1).Cells(29, LastRow)) ...
Run Code Online (Sandbox Code Playgroud)

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

ActiveSheet.Range(Cells(1, 1), Cells(29, LastRow)) ...
Run Code Online (Sandbox Code Playgroud)

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

无论如何,通常来说,请考虑如何避免在Excel VBA中使用“选择”。写入由2个单元格定义的范围的“正确”方法是这样的:

With Worksheets(1)
    Set myRange = .Range(.Cells(1, 1), .Cells(5, 5))
End With
Run Code Online (Sandbox Code Playgroud)

  • 将发表评论而不是发布答案...限制所有引用,Bartek。如果`ActiveSheet.Range()`读为`Sheets(1).Range()`,则情况会稍有不同,因为系统会为每个`cells()`推断出`ActiveSheet`。引用... Sheets(1).Range(Sheets(1).Cells(),Sheets(1).Cells())将是适当的,尽管`With-statement'通常会使它看起来更干净。 (2认同)