检查整个范围是否隐藏的一致方法

Consistant way to check if entire range is hidden

我有大量代码用于调整过滤器并将唯一值读入组合框等,它几乎完美地工作,但是这一行代码有时无法正确识别(仅当我过滤某些值时看起来).它应该防止错误,以防所有行由于已通过 makro 应用的过滤器而被隐藏。

If RangeCombo.EntireRow.Hidden = False Then

RangeCombo 在工作时和不工作时都包含隐藏行和非隐藏行,所以我真的不知道是什么原因造成的。我试过这个:

If RangeCombo.SpecialCells(xlCellTypeVisible).Count > 0 Then

但如果范围内没有可见单元格,它会抛出一个错误。

我也试过:

    Set x = RangeCombo.Find("*", , xlFormulas, xlWhole)
    If Not x Is Nothing Then

但这会找到单元格,即使整个范围都被隐藏了...

如果有任何解决方案可以帮助我绕过 xlCellTypeVisible 错误(当 RangeCombo 中的所有单元格都为空时)或任何其他可能实现我的目标的方式,我会很高兴。

检查自动过滤的单元格时,请始终在范围内包含 header 行,并检查可见单元格计数是否大于 1,如下所示...

If Range("A1:A" & LastRow).SpecialCells(xlCellTypeVisible).Count > 1 Then

其中 LastRow 是 sheet 上数据的最后一行。 根据您的要求更改范围。

如果应用自动筛选后没有返回任何行,则计数将等于 1,因为只有 header 行可见,您可以跳过对可见 rows/cells.[=11 执行某些操作=]

忽略错误通常是不可取的,但在某些情况下它是合法的。所以,你可以这样做

Sub x()

Dim r As Range

On Error Resume Next
Set r = RangeCombo.SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If Not r Is Nothing Then
    MsgBox "Visible"
Else
    MsgBox "All hidden"
End If

End Sub