自动过滤以仅选择可见行

时间:2015-08-26 18:10:08

标签: excel excel-vba visibility vba

我有这个代码。它循环遍历筛选条件的列表,然后如果没有要选择的数据再次显示所有数据并循环到下一个条件。如果它显示数据结束(slDown)并选择显示的所有数据,则将其复制并粘贴到另一个工作表中。

清理脚本清除所有空白行和列,然后返回到原始数据表并删除为复制粘贴选择的数据。

问题在于只有一行。它移动到带有数据的行,但是当我结束(xlDown)时,它一直射到底部,然后粘贴会导致宏冻结。

我嵌套了另一个if语句来捕获是否只有一行数据可见,但是我无法让它正常运行。有关嵌套if语句的任何建议吗?

Horse

1 个答案:

答案 0 :(得分:1)

我明白了......这就是我所做的。谢谢大家!

我使用了这个如果ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Areas.Count< = 2 而不是这个(ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell))= 2

Dim criteria As String
Dim F As Range
Set Rng = Sheets("Reference").Range("W2:W36")
For Each F In Rng
    criteria = F
    ActiveSheet.Range("$AV$1").AutoFilter Field:=48, Criteria1:="=*BULK SUBSERVIENT*", Operator:=xlAnd
    ActiveSheet.Range("$K$1").AutoFilter Field:=11, Criteria1:=criteria
    Range("A2:CM" & ActiveSheet.UsedRange.Rows.Count + 1) _
        .Cells.SpecialCells(xlCellTypeVisible).Rows(1).Select
    If ActiveCell.Value = vbNullString Then
        ActiveSheet.ShowAllData
        Else
        If ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Areas.Count <= 2 Then
            'Range(Selection).Select
            Selection.Copy
            Sheets("Bulk Subservient").Select
            ActiveSheet.Range("A" & Rows.Count).End(xlUp).Offset(1).Select
            ActiveSheet.Paste
            Call cleanup
        Else
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Sheets("Bulk Subservient").Select
        ActiveSheet.Range("A" & Rows.Count).End(xlUp).Offset(1).Select
        ActiveSheet.Paste
        Call cleanup
    End If
    End If
  Next F