#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 работает идеально.