.Hidden属性的意外行为

时间:2018-07-02 12:00:05

标签: excel excel-vba vba

为清楚起见,对我的代码应该做的事情进行快速描述(因为会使用一些外部数据,因此更难以重现该问题)

我的目标是创建一个切换按钮,该按钮将在其属性之间隐藏和取消隐藏数据表之间进行切换。这些功能确实可以正常工作,但是由于某些原因,尽管应该认为它是明显的行为,但我的范围的{strong>属性.Hidden似乎返回了意外的结果。

我的excel工作表如下:

enter image description here

我想在隐藏和取消隐藏蓝色表格之间切换。


Private Sub hide_button_Click()


    Dim copy_start As Integer
    Dim copy_end As Integer
    Dim ws As Worksheet: Set ws = Sheets("Summary")
    Dim tbl2 As ListObject: Set tbl2 = ws.ListObjects("t_sum2")



    copy_start = tbl2.HeaderRowRange.Row
    copy_end = tbl2.ListRows.Count + copy_start

   If (ws.Rows(copy_start & ":" & copy_end).EntireRow.Hidden = True) Then
       ws.Rows(copy_start & ":" & copy_end).EntireRow.Hidden = False
   Else
       ws.Rows(copy_start & ":" & copy_end).EntireRow.Hidden = True
   End If



End Sub

似乎很不言自明。因此,在编译并运行该过程之后,蓝色表格将按预期隐藏。

enter image description here

但是,再次运行该过程之后。该表保持隐藏状态,并且不会在显示隐藏行之间切换。

自然,我以为我只是错误地选择了copy_startcopy_end范围。因此,我在代码中添加了以下两个“调试消息”(在if条件之前)

MsgBox(copy_start & vbNewLine & copy_end)
MsgBox(ws.Rows(copy_start & ":" & copy_end).EntireRow.Hidden)

令我惊讶的是,它返回了以下结果:

enter image description here enter image description here

哪个绝对让我感到困惑,尤其是第二个MsgBox关于它为什么将.Hidden属性返回为False的原因,您可以清楚地看到copy_start和{{1} }行范围的计算正确,并且与蓝色表格的大小匹配:(插图)

enter image description here

谁能解释,为什么实际上copy_end实际上被隐藏时实际上返回Rows("21:34").EntireRow.Hidden还是False?(见图2)


编辑:

也许我应该透露更多细节。表格旁边有一个图形。我不知道它会如何影响这一操作,但也许是通过一些巫术……?我不知道

enter image description here

0 个答案:

没有答案