VBA скрывает / показывает 3 строки ниже активной ячейки

#excel #vba

#excel #vba

Вопрос:

У меня есть приведенный ниже код, который работает хорошо, однако у меня так много дополнительных учетных записей (например, «Ads_20_21»), что мне приходится многократно повторять код и создавать новые именованные диапазоны для того, что по сути просто скрывает / скрывает 3 строки ниже для каждой дополнительной учетной записи. Есть ли код, который я могу назначить кнопке, которая просто скроет / покажет 3 строки ниже активной ячейки, я пытался везде искать помощь, но безуспешно. Очень признателен за любую помощь.

 Sub ToggleHiddenRow(rng As Range)
  With rng.EntireRow
    .Hidden = Not .Hidden
  End With
End Sub

Sub Ads_20_21()
    ToggleHiddenRow ActiveSheet.Range("Advertising_20_21")
End Sub
  

Ответ №1:

Я предлагаю этот код:-

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Const TriggerClm        As String = "A"         ' change to suit
    Const FirstDataRow      As Long = 2             ' change to suit
    Const RowsToHide        As Long = 3             ' change to suit
    Dim Rng                 As Range
    
    Set Rng = Range(Cells(FirstDataRow, TriggerClm), Cells(Rows.Count, TriggerClm).End(xlUp))
    If Not Application.Intersect(Target, Rng) Is Nothing Then
        Set Rng = Range(Rows(Target.Row   1), Rows(Target.Row   RowsToHide   1))
        Rng.Rows.Hidden = Not Rng.Rows(1).Hidden
        Cancel = True
    End If
End Sub
  

Это процедура события, которая реагирует на событие двойного щелчка, что означает, что она запускается при двойном щелчке ячейки. Событие будет учтено только в модуле кода листа, на котором вы хотите выполнить действие. Поэтому важно, чтобы процедура была установлена в этом модуле и нигде больше. Из-за особой связи, которую этот модуль имеет с тем, что происходит на рабочем листе, Excel настраивает этот модуль при создании вкладки. Используйте существующий модуль, а не тот, который вы вставляете самостоятельно.

3 константы в верхней части кода предназначены для настройки. Определите столбец, который вы хотите дважды щелкнуть, первую строку данных и количество строк, которые вы хотите скрыть / показать, начиная со строки под строкой, которую вы дважды щелкнули. Процедура не будет выполняться при двойном щелчке другого столбца или над первой строкой данных. При запуске он скроет 3 строки, если они видны, или отобразит их, если они скрыты.

Я бы поискал способ, которым программа могла бы узнать, когда щелкает строка, относящаяся к субсчету, и пропустить действие для таких строк. Если у вас есть такой критерий, установите его в коде раньше If Not Application.Intersect(Target, Rng) Is Nothing Then , а затем включите его в ту же строку. Однако, поскольку код сейчас, не будет никакого большого наказания за нажатие неправильной строки. Для отмены действия требуется всего один двойной щелчок.

Комментарии:

1. О, это блестящий вариант, большое вам спасибо. Я знаю диапазон, но у меня возникают проблемы с его добавлением, имя диапазона — «Detail_Accounts_20_21», возможно ли также добавить несколько диапазонов, например Detail_Accounts_21_22 и т. Д.?

2. Нет. Это должно быть общее описание, например, если выбранная ячейка пуста (или имеет номер) или столбец C той же строки имеет дату — некоторый критерий, по которому все строки основного счета отличаются от всех строк субсчета.

3. Имеет смысл, высоко оцененный Variatus работает идеально.