我对一个范围进行了一些过滤,并使用
复制过滤范围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
。如果有人能帮助我,那就太好了。
答案 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)
遇到了同样的问题,但是要过滤命名表,可以通过以下方式解决它*:
true
值进行计数.SpecialCells(xlCellTypeVisible).Copy
,否则跳至下一步(我在循环中进行此操作)*我知道这个问题来自2015年,但我在2019年结束了类似的问题,因此我将退出解决方案。