Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2012, 20:56   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Срабатывание макросов в зависимости изменений в 2-х диапазонах

Тут вот такое дело. На листе отслеживаются изменения диапазона и, в зависимости от внесенного в ячейку значения (от 1 до 3), срабатывают макросы. Код такой:


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B4:B500")) Is Nothing Then
If Target = "1" Then
Call Макрос_11
Call SendmailTheBat
Call Макрос_12
Call Макрос_13
Call Макрос_14
Call Макрос_15
ElseIf Target = "2" Then
Call Макрос_21
Call SendmailTheBat
Call Макрос_22
Call Макрос_23
Call Макрос_24
Call Макрос_25
ElseIf Target = "3" Then
Call Макрос_31
Call SendmailTheBat
Call Макрос_32
Call Макрос_33
Call Макрос_34
Call Макрос_35
End If
End If
End Sub

Попытаюсь сформулировать проблемку. Необходимо отслеживать изменения не в одном диапазоне, а в двух (второй "D4:D500")) и разложить срабатывания макросов. Первые два срабатывают при внесении в диапазон B4:B500 значений 1, 2 или 3, остальные срабатывают при внесении в диапазон D4:D500 любого числа (от 1 до 5000 условно). НО срабатывают в порядке, зависящем от значения, внесенного в диапазон B4:B500. То есть, если в ячейке диапазона B4:B500 стоит 2, то при изменении ячейки той же строки диапазона D4:D500 сработают макросы 22, 23, 24, 25.
Фуух. У меня такое впечатление, что я дольше писал тему, чем решать эту задачку. Направьте меня в нужное русло.
strannick вне форума Ответить с цитированием
Старый 06.01.2012, 21:53   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Во
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("B4:B500,D4:D500")) Is Nothing Then Exit Sub
If Target.Column = 2 Then
    Select Case Target.Value
        Case 1
            Call Макрос_11
            Call SendmailTheBat
            Call Макрос_12
            Call Макрос_13
            Call Макрос_14
            Call Макрос_15
        Case 2
            Call Макрос_21
            Call SendmailTheBat
            Call Макрос_22
            Call Макрос_23
            Call Макрос_24
            Call Макрос_25
        Case 3
            Call Макрос_31
            Call SendmailTheBat
            Call Макрос_32
            Call Макрос_33
            Call Макрос_34
            Call Макрос_35
    End Select
Else
    If Target.Offset(, -2) = 2 Then
        Call Макрос_22
        Call Макрос_23
        Call Макрос_24
        Call Макрос_25
    End If
End If
End Sub
И еще отключить (и включить) события, если макросы работают с этим же листом.

Последний раз редактировалось nilem; 06.01.2012 в 21:55.
nilem вне форума Ответить с цитированием
Старый 06.01.2012, 23:13   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Подработал под каждое введенное в столбец В значение, срабатывает. Спасибо за помощь. С Рождеством Христовым!!!
strannick вне форума Ответить с цитированием
Старый 06.01.2012, 23:24   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Что-то мне подсказывает, что ваши макросы с аналогичыним именами (Макрос_11, Макрос_21, Макрос_31) очень похожи друг на друга.

Вы бы выложили весь код (файл Excel со всеми макросами) - мы бы подсказали, как сократить объём кода в несколько раз
(в макрос можно передавать параметры, а вы, судя по коду, этим не пользуетесь)
EducatedFool вне форума Ответить с цитированием
Старый 07.01.2012, 21:07   #5
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Все правильно. Они практически идентичны. Завтра выложу коды и спрошу совета. Спасибо. И с Рождеством Христовым всех форумчан!!!
strannick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сложить значения в диапазонах Vja4eslav Microsoft Office Excel 10 22.12.2011 12:51
сложить значения в диапазонах Vja4eslav Microsoft Office Excel 1 20.12.2011 17:04
счёт значений в диапазонах vkharin Microsoft Office Excel 1 14.02.2011 00:44
Подсчет ячеек в именнованных диапазонах kinogruppa Microsoft Office Excel 4 14.08.2010 11:49
Автоматический запуск макросов с листа на котором указан перечень макросов с параметрами и без Neoli Microsoft Office Excel 2 09.03.2009 14:31