Запуск макроса кликом по ячейке или при изменении значения ячейки

Запуск макроса изменением значения в ячейке.

Ранее в статье

Как сделать связанный выпадающий список в «Эксель», зависящий от значения в соседней ячейке.

рассказывалось о том, как реализовать в программе Excel связанные между собой выпадающие списки. Недавно создавая файл со связанными списками столкнулся с проблемкой — при обновлении записи в первой ячейке, от которой зависит список во второй, вторая ячейка остается неизменной, не обнуляет значения.

Связанный списокРешил исправить ситуацию и сделать так чтобы при клике по первой ячейке вторая ячейка принимала значение «пусто».

Для этого потребовалось написать 2 коротеньких алгоритма (макроса):

Первый макрос —  производит удаление данных из ячейки и выглядит следующим образом:

Sub noll()
On Error Resume Next
ActiveSheet.Cells(2, 2).Value = «»
End Sub

Этот макрос следует записать в поле раздела «module» — в «контейнер» модуля.

Второй макрос — активирует первый при клике по ячейке.

Выглядит код вызывающий (запускающий ) макрос по клику на ячейку, следующим образом:

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim u As String
On Error Resume Next
If Not Intersect(Target, Range(«B1»)) Is Nothing Then
Call noll
End If
End Sub

 

Этот код нужно записывать не в контейнер «module», а непосредтвенно в лист. Для этого следует в меню разработчика в просмотре кода:Двойной клик

  • Кликнуть двойным щелчком по названию листа.
  • После двойного клика будет открыто поле для внесения кода аналогичное полю модуля (module).

После записи макроса проблемка была решена, но мне не очень понравилось, что вторая ячейка обнулялась при любом выделении или клике по первой ячейке.
Поэтому я решил поправить код вызова макроса и изменил его таким образом, чтобы макрос активировался не при клике на ячейку, а при ее изменении.

Код стал выглядеть следующим образом:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim u As String
On Error Resume Next
If Not Intersect(Target, Range(«B1»)) Is Nothing Then
Call noll
End If
End Sub

Теперь макрос стал запускаться только при изменении первой ячейки, например, при выборе нового значения из выпадающего списка.

Вопросы и пожелания можете оставлять в комментариях или на форуме нашего сайта.
Видео о работе в excel можно найти на нашем youtube канале по ссылке:

Канал «RuExcel»

Удачи в изучении программы Ecxel.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *