#excel #vba
#excel #vba
Вопрос:
Я хотел бы изменить значения для определенных ячеек в зависимости от конкретной группы, если она развернута или свернута.
Я нашел способ, но это ручной способ (image1 image2) (макрос необходимо запускать при каждом запуске).
Есть ли способ использовать функцию (например, worksheet_change), чтобы это было в режиме реального времени?
PS Извините за мой плохой английский и будьте добры, я вроде как новичок в VBA (первый код).
Спасибо.
Private Sub groups()
If Worksheets("Feuil1").Columns("F").ShowDetail = True Then
Range("K2:K7").Value = "YES"
Else
Range("K2:K7").Value = "NO"
End If
End Sub
Ответ №1:
Спасибо Luuklag за ваше решение, но, как я уже сказал в своем комментарии, в вашем коде я должен вручную обновить ячейку-заполнитель, которая не является тем, что я ищу.
Но я нашел кое-что, где мои ячейки обновляются путем расширения или свертывания моей группы. И для этого, как вы сказали, мне нужна ячейка-заполнитель, которая обновляется при каждом вычислении.
Я использую формулу =NOW
для ячейки A1
, потому что всегда полезно знать время и дату. Вот (комбинированный) код для тех, кто ищет решение :
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
'Where F is the column having the group button
If Columns("F").ShowDetail = True Then
'This is where you choose the cells that are dependent to the group and attribute something
Range("G10:G19").Value = "YES"
Else
'Same here. It could be other cells too
Range("G10:G19").Value = "NO"
End If
Application.EnableEvents = True
End Sub
Ответ №2:
Для этого есть простое решение. Каждый раз, когда вы разворачиваете или сворачиваете группу, вы запускаете событие worksheet_calculate . Это можно использовать в ваших интересах.
Все, что вам нужно, это ячейка-заполнитель, которую вы заполняете изменяемой функцией (функцией, которая изменяет свое значение при каждом вычислении). Например, вы можете использовать =randbetween(1,10)
или =NOW()
.
Затем у вас есть событие изменения рабочего листа для поиска ячейки-заполнителя AA1
в этом примере.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("AA1")) Is Nothing Then
Call groups
End If
End Sub
Комментарии:
1. Ваш код почти работает: ячейки меняются, но они не зависят от кнопки группы. Мне нужно войти в ячейку-заполнитель, обновить ее вручную, а затем ячейки проверяют, расширена ли группа или свернута. Я хотел, чтобы ячейки полностью зависели от кнопки группы.