处理无过滤范围为空时发现错误的单元格

时间:2015-10-21 12:26:12

标签: vba excel-vba excel

我对一个范围进行了一些过滤,并使用

复制过滤范围
myRange.SpecialCells(xlCellTypeVisible).Copy

但是一旦过滤器过滤所有情况,我就会收到错误“1004没有找到细胞”。如果过滤范围为空,我正在寻找一种检查方法(没有On Error)?

我已经尝试使用lastRow = .Cells(.Rows.Count, ColumnName).End(xlUp).Row设置范围并检查if lastRow > 0,但这样我也会计算过滤(或隐藏)行内容。

我也试过

Sub test()
    Dim rngStart As Range
    Dim rngFiltered As Range

    Set rngStart = Sheets(1).Range("A1:A6")
    Set rngFiltered = rngStart.SpecialCells(xlCellTypeVisible).Select

    If rngFiltered.Rows.Count = 0 Then
        MsgBox ("No Cases")
    Else
        MsgBox ("Found Cases")
    End If
End Sub

但是我在"No cells found"行中也收到错误Set rngFiltered。如果有人能帮助我,那就太好了。

4 个答案:

答案 0 :(得分:6)

On Error Resume Next
Set rngFiltered = rngStart.SpecialCells(xlCellTypeVisible)
On Error Goto 0

If not rngFiltered is Nothing then
    rngFiltered.Copy
End If

答案 1 :(得分:5)

我将解决方案存储到一个函数中。在这里,我在机制上使用了一个错误。

Function errorCatchEmptyFilter(ByRef rngstart As Range) As Boolean

errorCatchEmptyFilter = False

'here I get an error if there are no cells
    On Error GoTo hell
    Set rngFiltered = rngstart.SpecialCells(xlCellTypeVisible)

Exit function

hell:
errorCatchEmptyFilter = True

End Function

答案 2 :(得分:0)

我所做的是计算过滤的行:

Sheets("Sheet1").Range("A2:Z2").AutoFilter
Sheets("Sheet1").Range("A2:Z2").AutoFilter Field:=1, Criteria1:=filter1
If Sheets("Sheet1").AutoFilter.Range.Columns(4).SpecialCells(xlCellTypeVisible).Count > 1 Then

您可以更改列数以满足您的需求

答案 3 :(得分:0)

遇到了同样的问题,但是要过滤命名表,可以通过以下方式解决它*:

  1. 我没有应用多个过滤器,而是在表的末尾添加了一个列,其中的公式对于我要过滤的行将返回true,对于过滤出的行将返回false。
  2. 然后,我为该真实值应用了一个过滤器,并添加了一个单元格,该单元格将对该列中的所有true值进行计数
  3. 在vba中,首先为表重新应用过滤器,然后如果该计数器大于0,请执行.SpecialCells(xlCellTypeVisible).Copy,否则跳至下一步(我在循环中进行此操作)

*我知道这个问题来自2015年,但我在2019年结束了类似的问题,因此我将退出解决方案。