Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке

Автор lasanimas, 25 декабря 2017, 13:57

lasanimas

Подскажите пожалуйста, как запустить процедуру или макрос, после изменения данных в конкретной ячейке при использовании списка (проверка данных)?

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

Администратор

В A1 находится список. После выбора пункта, будет запускаться макрос. Если же вы будете вносить изменения в другие ячейки, то макрос не будет запускаться.

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    ' Если изменение произошло в нескольких ячейках, то ничего не делаем.
    If Target.CountLarge > 1 Then Exit Sub
    ' Если изменение произошло не в "A1".
    If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
    ' Запуск макроса.
    макрос
End Sub

Private Sub макрос()
    MsgBox "Макрос запущен.", vbInformation
End Sub
[свернуть]

[вложение удалено администратором]


lasanimas

А как сюда же добавить проверку другой ячейки, после изменения которой запускается другой макрос?

Администратор

В файле сделано, т.к. на словах будет сложно объяснить.
Первый макрос запускается, когда юзер изменяет ячейку A1. Второй запускается, когда юзер изменяет ячейку A2.

[вложение удалено администратором]

lasanimas


lasanimas

А ещё вопрос. Можно ли проверять в ячейке определенное слово? Например макрос запустится, если в ячейке будет слово "да" или фраза из нескольких слов?

Администратор

Target - это объект "Range". Например, объектом "Range" является "Range", "Cells(1,1)", "ActiveCell". То есть с "Target" можно делать то же, что с перечисленными словами.

Макрос
Private Sub Worksheet_Change(ByVal Target As Range)
    ' Если изменение произошло в нескольких ячейках, то ничего не делаем.
    If Target.CountLarge > 1 Then Exit Sub
    ' Если изменение произошло не в "A1".
    If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
    ' Смотрим, какой текст в ячейке, в которой произошло изменение.
    If Target.Value <> "заданная фраза" Then Exit Sub
    ' Запуск макроса.
    макрос
End Sub

Private Sub макрос()
    MsgBox "Макрос запущен.", vbInformation
End Sub
[свернуть]