Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: lasanimas от 25 декабря 2017, 13:57

Название: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: lasanimas от 25 декабря 2017, 13:57
Подскажите пожалуйста, как запустить процедуру или макрос, после изменения данных в конкретной ячейке при использовании списка (проверка данных)?

Мне нужно, чтобы пользователь выбрал из выпадающего списка вариант, а после этого выбора запустился макрос на изменение высоты строк на другом листе.
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: Администратор от 25 декабря 2017, 14:57
В 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
[свернуть]

[вложение удалено администратором]
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: lasanimas от 25 декабря 2017, 15:01
Всё получилось. Спасибо большое!
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: lasanimas от 25 декабря 2017, 15:17
А как сюда же добавить проверку другой ячейки, после изменения которой запускается другой макрос?
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: Администратор от 25 декабря 2017, 15:22
В файле сделано, т.к. на словах будет сложно объяснить.
Первый макрос запускается, когда юзер изменяет ячейку A1. Второй запускается, когда юзер изменяет ячейку A2.

[вложение удалено администратором]
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: lasanimas от 25 декабря 2017, 15:33
Всё по этой теме получилось, спасибо огромное.
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: lasanimas от 25 декабря 2017, 15:43
А ещё вопрос. Можно ли проверять в ячейке определенное слово? Например макрос запустится, если в ячейке будет слово "да" или фраза из нескольких слов?
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: Администратор от 25 декабря 2017, 16:37
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
[свернуть]
Название: Re: Excel VBA Макросы: Запуск процедуры при изменении данных в конкретной ячейке
Отправлено: lasanimas от 25 декабря 2017, 20:31
Спасибо за помощь!