Excel VBA: ячейки меняют значения в зависимости от конкретных групп (развернутые или свернутые)

#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. Ваш код почти работает: ячейки меняются, но они не зависят от кнопки группы. Мне нужно войти в ячейку-заполнитель, обновить ее вручную, а затем ячейки проверяют, расширена ли группа или свернута. Я хотел, чтобы ячейки полностью зависели от кнопки группы.