Excel VBA - 检查筛选表是否返回任何结果

Ada*_*mic 5 excel vba

我有一个宏来过滤一个表(在代码中作为ListObject),然后将DataBodyRange中的可见单元格复制到一个单独的表.除非过滤操作删除所有数据(即表只有标题行而没有其他内容),否则代码工作正常.

有没有一种简洁的方法来检查是否有任何行可见?on error resume如果可能的话,我想避免使用条款,但我很难想到其他任何方式吗?

我在下面加入了一些伪代码来说明我的意思,任何帮助都会非常感激!

亚当

If TargetTable.DataBodyRange.VisibleRows.Count > 0 Then
    TargetTable.DataBodyRange.SpecialCells(xlCellTypeVisible).Copy Destination:=OutputPasteRange
End If
Run Code Online (Sandbox Code Playgroud)

Dav*_*ens 6

使用 Table 的Range对象,而不是DataBodyRange. 然后,检查以确保.SpecialCells(xlCellTypeVisible).Rows.Count > 1.

Sub TestEmptyTable()
Dim tbl As ListObject
Dim outputPasteRange As Range
Dim tblIsVisible As Boolean

Set tbl = ActiveSheet.ListObjects(1)
Set outputPasteRange = Range("B15")

If tbl.Range.SpecialCells(xlCellTypeVisible).Areas.Count > 1 Then
    tblIsVisible = True
Else:
    tblIsVisible = tbl.Range.SpecialCells(xlCellTypeVisible).Rows.Count > 1
End If

If tblIsVisible Then
    tbl.DataBodyRange.SpecialCells(xlCellTypeVisible).Copy _
        Destination:=outputPasteRange

Else:
    MsgBox tbl.Name & " has been filtered to no visible records", vbInformation

End If

End Sub
Run Code Online (Sandbox Code Playgroud)


Sla*_*lai 5

只需检查是否Range.Height不为 0:

If [Table1].Height Then
Run Code Online (Sandbox Code Playgroud)

另外,当大于 0.SpecialCells(xlCellTypeVisible)时则不需要:.Height

If TargetTable.DataBodyRange.Height Then TargetTable.DataBodyRange.Copy OutputPasteRange
Run Code Online (Sandbox Code Playgroud)