我有一个宏来过滤一个表(在代码中作为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)
使用 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)
只需检查是否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)
归档时间: |
|
查看次数: |
16094 次 |
最近记录: |