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

 

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

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

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

рассказывалось о том, как реализовать в программе 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.

 

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

  1. Уважаемый Автор! А не мо6ли бы подсказать как выполнить походее аналогичное, что было у вас сейчас, но по значению или ошибке в ячейке чтобы макрос запускался бы сам, вместо измения? Без щелчка по ячейке то есть.
    Например, если в ячейке А1 ошибка» #ЗНАЧ» — то автоматически без участия оператора запускается макрос под именем «Макрос2»

    И если после максимум двух запусков макроса2 в ячейке А1 по прежнему отображена ошибка «#ЗНАЧ» то уже не запускаем больше и можем вывести msgbox «Запуск макроса не повлиял на ошибку!»:)

    1. Добрый день. Можно запускать макрос по изменению листа private Sub Worksheet_Change(ByVal Target As Range)

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

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