首页 > 解决方案 > 复制具有标准 4、5、8、10、11、12、13 的过滤行

问题描述

我正在尝试将具有标准 4、5、8、10、11、12、13 的行复制到单独的工作表(2019_Rücktrans)中。

Sub Copy()
Dim variable As String
variable = "2019"

With Sheets(variable).UsedRange
    .AutoFilter Field:=22, Criteria1:=Array("4", "5", "8", "10", "11", "12", "13")
    .Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy
End With
Sheets("2019_Rücktrans").Cells(Rows.Count, 1).End(x1Up).Offset(1, 0).PasteSpecial x1PasteValues
Sheets(variable).UsedRange.AutoFilter
End Sub

错误信息:

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

标签: excelvba

解决方案


我相信以下内容应该可以帮助您实现所需的结果,它与使用带有过滤器的 Operator 语句有关,因此它不是简单地过滤到数组的最后一个值,而是实际过滤数组中的所有值:

Sub Copyit()
Dim variable As String
Dim LastRow As Long
variable = "2019"
LastRow = Sheets("2019_Rücktrans").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
With Sheets(variable).UsedRange
    .AutoFilter Field:=22, Criteria1:=Array("4", "5", "8", "10", "11", "12", "13"), Operator:=xlFilterValues
    .Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy Sheets("2019_Rücktrans").Range("A" & LastRow)
End With
Sheets(variable).UsedRange.AutoFilter
End Sub

除了注释之外,验证当前未设置过滤器的一种方法是在代码顶部添加以下内容:

On Error Resume Next
ThisWorkbook.Worksheets("2019_Rücktrans").ShowAllData
On Error GoTo 0

推荐阅读