6

テーブルを (コード内で ListObject として) フィルター処理し、DataBodyRange 内の表示されているセルを別のテーブルにコピーするマクロがあります。フィルタリング アクションによってすべてのデータが削除されない限り (つまり、テーブルにはヘッダー行のみがあり、他には何もない場合)、コードは正常に機能します。

行が表示されているかどうかを確認するきちんとした方法はありますか? できれば用語は避けたいのon error resumeですが、他の方法を考えるのに苦労していますか?

私が何を意味するかを説明するために、以下にいくつかの疑似コードを含めました。

アダム

If TargetTable.DataBodyRange.VisibleRows.Count > 0 Then
    TargetTable.DataBodyRange.SpecialCells(xlCellTypeVisible).Copy Destination:=OutputPasteRange
End If
4

3 に答える 3

2

.SpecialCells(xlCellTypeVisible).Address別のアプローチは、ヘッダー行アドレスと比較することtbl.HeaderRowRange.Addressです。

以下は、David のコードのバリエーションです。

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

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

    tblIsVisible = tbl.Range.SpecialCells(xlCellTypeVisible).Address <> _ 
        tbl.HeaderRowRange.Address

    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
于 2016-07-26T00:54:00.737 に答える