为清楚起见,对我的代码应该做的事情进行快速描述(因为会使用一些外部数据,因此更难以重现该问题)。
我的目标是创建一个切换按钮,该按钮将在其属性之间隐藏和取消隐藏数据表之间进行切换。这些功能确实可以正常工作,但是由于某些原因,尽管应该认为它是明显的行为,但我的范围的{strong>属性.Hidden
似乎返回了意外的结果。
我的excel工作表如下:
我想在隐藏和取消隐藏蓝色表格之间切换。
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
似乎很不言自明。因此,在编译并运行该过程之后,蓝色表格将按预期隐藏。
但是,再次运行该过程之后。该表保持隐藏状态,并且不会在显示隐藏行之间切换。
自然,我以为我只是错误地选择了copy_start
和copy_end
范围。因此,我在代码中添加了以下两个“调试消息”(在if条件之前)
MsgBox(copy_start & vbNewLine & copy_end)
MsgBox(ws.Rows(copy_start & ":" & copy_end).EntireRow.Hidden)
令我惊讶的是,它返回了以下结果:
哪个绝对让我感到困惑,尤其是第二个MsgBox
关于它为什么将.Hidden
属性返回为False的原因,您可以清楚地看到copy_start
和{{1} }行范围的计算正确,并且与蓝色表格的大小匹配:(插图)
谁能解释,为什么实际上copy_end
实际上被隐藏时实际上返回Rows("21:34").EntireRow.Hidden
还是False?(见图2)
编辑:
也许我应该透露更多细节。表格旁边有一个图形。我不知道它会如何影响这一操作,但也许是通过一些巫术……?我不知道