
Мне удалось создать флажки для отображения/скрытия определенных строк в моем документе Excel, используя следующий код
If CheckBox1.Value = True Then Rows("26:28").EntireRow.Hidden = False If CheckBox1.Value = False Then Rows("26:28").EntireRow.Hidden = True
Однако мне нужно иметь возможность обновлять диапазон при вставке строк выше этого диапазона.
Пытался найти ячейку, с которой начинается диапазон, а затем прибавить к диапазону 2, но не совсем понимал, как это сделать.
Ваше здоровье
Роберт
решение1
Отслеживание и управление добавлением/удалением строк может быть чрезвычайно сложным (обязательно всегда фиксируйте это, также необходимо либо изменить сам код для нового номера строки, либо сохранить его где-то на листе...), я предлагаю использовать какой-нибудь обходной путь.
Используйте именованный диапазон: именованные диапазоны сдвигаются вместе с ячейками, поэтому ссылки на них всегда будут ссылаться на одни и те же ячейки.
- В примере ниже A6:A7 — это именованный диапазон, и пример кода показывает/скрывает его.
- Другим вариантом может быть поиск конкретной информации в электронной таблице и выполнение действий на ее основе, однако это опять же довольно сложно.
решение2
Я предполагаю, что у вас есть рабочий код для отображения/скрытия этих строк, и что ваша проблема заключается только в том, чтобы найти строку после того, как вы вставили строки выше.
Если у вас есть только один диапазон для отображения/скрытия, вы можете использовать именованный диапазон. Когда новые строки выше, именованный диапазон будет по-прежнему указывать на те же строки.
Просто дайте имя (например ToBeHidden
, ) нескольким ячейкам (например A26:A28
, нет необходимости давать имена всем строкам) и используйте этот код для их переключения:
With ActiveSheet.Range("ToBeHidden").EntireRow
If .Hidden = True Then
.Hidden = False
Else
.Hidden = True
End If
End With
Легко переключаться с одним набором линий, но если у вас их много, вам понадобится что-то более мощное. Возможно, стоит добавить специальный столбец для активации этой функции.
решение3
Поскольку цель OP — «определить, вставлены ли строки и сколько их», о чем вы можете узнать в комментариях выше от Мате Юхаса, то решение должно отслеживать скрытый диапазон данных для вставленных или удаленных строк.
Сначала назовите скрытый диапазон A26:A28
и используйте следующий код VBA для отслеживания количества вставленных или удаленных строк.
Private Sub Worksheet_Change(ByVal Target As Range)
Static lngRow As Long
Dim rng1 As Range
Set rng1 = ThisWorkbook.Names("Named Range").RefersToRange
If lngRow = 0 Then
lngRow = rng1.Row
Exit Sub
End If
If rng1.Row = lngRow Then Exit Sub
If rng1.Row < lngRow Then
MsgBox lngRow - rng1.Row & " Row Deleted"
Else
MsgBox rng1.Row - lngRow & " Rows Inserted"
End If
lngRow = rng1.Row
End Sub
Примечание: Если вы хотите посчитать только вставленные строки, измените последнюю If...
на
If rng1.Row > lngRow Then
MsgBox rng1.Row - lngRow & " Rows Inserted"
End If