краткое описание того, что мой код должен делать для ясности (поскольку будут использоваться некоторые внешние данные, затрудняющие воспроизведение проблемы) .
Моя цель - создать кнопку переключения, которая будет переключаться между скрытием и отображением таблицы данных между ее свойствами. Они работают нормально, но по какой-то причине свойство .Hidden
моего диапазона, кажется, возвращает неожиданные результаты, несмотря на то, что следует рассматривать как очевидное поведение.
Мой лист Excel выглядит так:
![enter image description here](https://i.stack.imgur.com/uqS9q.png)
И я хочу переключиться между сокрытием и скрытием синего стола.
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](https://i.stack.imgur.com/vV4Vc.png)
Однако после повторного запуска процедуры. Эта таблица остается скрытой и не переключается между раскрытием скрытых строк.
Естественно, я думал, что просто неправильно выбираю диапазоны copy_start
& copy_end
. Поэтому я добавил эти два следующих «сообщения отладки» в свой код (до условия if)
MsgBox(copy_start & vbNewLine & copy_end)
MsgBox(ws.Rows(copy_start & ":" & copy_end).EntireRow.Hidden)
К моему собственному удивлению, он дал следующие результаты:
![enter image description here](https://i.stack.imgur.com/SSIyb.png)
Что меня совершенно сбивает с толку, особенно второй MsgBox
относительно того, почему он возвращает свойство .Hidden
как False, когда вы можете четко видеть, диапазоны строк copy_start
и copy_end
рассчитаны правильно, и они соответствуют синему размеру таблицы: (иллюстрация)
![enter image description here](https://i.stack.imgur.com/94z60.png)
Может кто-нибудь объяснить, почему по существу Rows("21:34").EntireRow.Hidden
возвращается как Ложь, когда они действительно скрыты? (см. Рис. 2)
EDIT:
Возможно, еще одну деталь, которую я должен раскрыть. Рядом с таблицами есть график. Я не понимаю, как это должно повлиять на эту операцию, но, может быть, через какое-то колдовство ...? Я не знаю
![enter image description here](https://i.stack.imgur.com/5LxzV.png)