Код VBA для учета вставки строк после свершившегося факта.

Код VBA для учета вставки строк после свершившегося факта.

Мне удалось создать флажки для отображения/скрытия определенных строк в моем документе 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

Отслеживание и управление добавлением/удалением строк может быть чрезвычайно сложным (обязательно всегда фиксируйте это, также необходимо либо изменить сам код для нового номера строки, либо сохранить его где-то на листе...), я предлагаю использовать какой-нибудь обходной путь.

  1. Используйте именованный диапазон: именованные диапазоны сдвигаются вместе с ячейками, поэтому ссылки на них всегда будут ссылаться на одни и те же ячейки.

    • В примере ниже A6:A7 — это именованный диапазон, и пример кода показывает/скрывает его.

введите описание изображения здесь

  1. Другим вариантом может быть поиск конкретной информации в электронной таблице и выполнение действий на ее основе, однако это опять же довольно сложно.

решение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

Связанный контент