如何确定是否隐藏了Excel范围?

时间:2015-01-21 19:12:19

标签: excel vba excel-vba

在我的代码中,我包含一个布尔变量,我想在其中指定范围隐藏属性的值。即如果隐藏范围,则变量的值应为true,反之亦然。

在运行代码时,我得到了一个' 1004'运行时错误 - 无法获取Range类的Hidden属性。通过这个我假设在这种情况下隐藏属性是只写的(如果我错了,请纠正我。)

有没有办法确定(在我的代码中,而不是通过观察)是否隐藏了范围/单元格?

我有一个名为" minas"我试图根据一些标准创建一个minas集合。

Public mines As Collection
Sub existing_months()
    Set mines = New Collection
    Dim min As minas
    Dim str As String
    Dim x As Range
    Dim y As Boolean
    For i = 1 To 12
        Set min = New minas
        Set x = Range("A1:A500").Find(i, LookIn:=xlValues, LookAt:=xlWhole)
        If x Is Nothing Then GoTo next_iteration:
        y = x.Hidden 'does not get the property
        Call min.initialize(x, y)
        str = min.minas & "/" & min.etos
        mines.Add min, str
        Debug.Print min.ref_range.Address & " " & min.end_cell
next_iteration:
    Next
    Set min = Nothing
End Sub

3 个答案:

答案 0 :(得分:5)

如果单元格位于隐藏行或隐藏列上,则可以说隐藏单元格。如果其中包含所有单元格,则隐藏范围隐藏范围:

Public Function IsHidden(rIn As Range) As Boolean
    Dim r As Range
    IsHidden = True
    For Each r In rIn
        If Not r.EntireRow.Hidden Then
            If Not r.EntireColumn.Hidden Then
                IsHidden = False
                Exit Function
            End If
        End If
    Next r
End Function

答案 1 :(得分:3)

根据Google快速搜索,如果您使用Range.Find,则LookIn:=xlValues将无法找到数据。我用"测试"测试了这个。在单元格A6中并隐藏该行。此代码返回Nothing

Sub TestIt()
    Dim x As Range
    Set x = Range("A1:A7").Find("Test", , xlValues, xlWhole)
    If x Is Nothing Then
        MsgBox "Nothing"
    Else
        If x.EntireRow.Hidden = True Then
            MsgBox x.Address & " is Hidden"
        Else
            MsgBox x.Address & " is Visible"
        End If
    End If
End Sub

您需要使用LookIn:=xlFormulas

Sub TestIt()
    Dim x As Range
    Set x = Range("A1:A7").Find("Test", , xlFormulas, xlWhole)
    If x Is Nothing Then
        MsgBox "Nothing"
    Else
        If x.EntireRow.Hidden = True Then
            MsgBox x.Address & " is Hidden"
        Else
            MsgBox x.Address & " is Visible"
        End If
    End If
End Sub

然后你可以使用:

y = x.EntireRow.Hidden

y = x.EntireColumn.Hidden

获取布尔值(如果单元格隐藏则为True,如果单元格可见,则为False)

答案 2 :(得分:0)

您是否需要确定是否隐藏了整个列?单个细胞不能隐藏。 (当然,除非你指的是HiddenFormula属性)。如果是这样,以下代码应该起作用:

y = x.entirecolumn.Hidden 'does not get the property

让我知道这是否有效