Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос второй раз не срабатывает - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос второй раз не срабатывает (Макросы/Sub)
Макрос второй раз не срабатывает
pabchek Дата: Понедельник, 01.02.2016, 17:08 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 664
Репутация: 147 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, уважаемые!
Ковыряю новую для меня тему макросов. Если без особых подробностей - в файле есть макрос "W_Change" который по условию присваивает ячейке С16 текстовое значение. Так вот он один раз срабатывает, а повторно (если удалить значения из С15-16), ничего не происходит. Можете подсказать, где пробел в моих чайниковских знаниях?
[vba]
Код
Private Sub W_Change(ByVal Target As Range)
    Application.ScreenUpdating = 0
    Application.EnableEvents = False
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Cells.Value = "Заказ" Then
        Range("C16") = "этап2"
        Else: Exit Sub
    End If
    Application.EnableEvents = True
End Sub
[/vba]
А вообще хотел сделать, чтобы при выборе из списка значения в ячеке С15 в нижележащих ячейках появились значения из ряда Списки!T2:Z2
К сообщению приложен файл: 1626009.xlsm(61Kb)


"Учиться, учиться и еще раз учиться!"
WM: R399923528092


Сообщение отредактировал pabchek - Понедельник, 01.02.2016, 17:09
 
Ответить
СообщениеЗдравствуйте, уважаемые!
Ковыряю новую для меня тему макросов. Если без особых подробностей - в файле есть макрос "W_Change" который по условию присваивает ячейке С16 текстовое значение. Так вот он один раз срабатывает, а повторно (если удалить значения из С15-16), ничего не происходит. Можете подсказать, где пробел в моих чайниковских знаниях?
[vba]
Код
Private Sub W_Change(ByVal Target As Range)
    Application.ScreenUpdating = 0
    Application.EnableEvents = False
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Cells.Value = "Заказ" Then
        Range("C16") = "этап2"
        Else: Exit Sub
    End If
    Application.EnableEvents = True
End Sub
[/vba]
А вообще хотел сделать, чтобы при выборе из списка значения в ячеке С15 в нижележащих ячейках появились значения из ряда Списки!T2:Z2

Автор - pabchek
Дата добавления - 01.02.2016 в 17:08
RAN Дата: Понедельник, 01.02.2016, 17:14 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4297
Репутация: 839 ±
Замечаний: 0% ±

2010
[vba]
Код
Private Sub W_Change(ByVal Target As Range)
    Application.ScreenUpdating = 0
    Application.EnableEvents = False ' отключаем обработку событий
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Cells.Value = "Заказ" Then
        Range("C16") = "этап2"
        Else: Exit Sub ' кто обработку событий включать будет?
    End If
    Application.EnableEvents = True ' отключаем обработку событий
End Sub
[/vba]
[p.s.]строка
Else: Exit Sub
просто лишняя
И здесь
If Target.Cells.Count > 1 Then Exit Sub порядок строк неверный [/p.s.]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Понедельник, 01.02.2016, 17:17
 
Ответить
Сообщение[vba]
Код
Private Sub W_Change(ByVal Target As Range)
    Application.ScreenUpdating = 0
    Application.EnableEvents = False ' отключаем обработку событий
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Cells.Value = "Заказ" Then
        Range("C16") = "этап2"
        Else: Exit Sub ' кто обработку событий включать будет?
    End If
    Application.EnableEvents = True ' отключаем обработку событий
End Sub
[/vba]
[p.s.]строка
Else: Exit Sub
просто лишняя
И здесь
If Target.Cells.Count > 1 Then Exit Sub порядок строк неверный [/p.s.]

Автор - RAN
Дата добавления - 01.02.2016 в 17:14
Udik Дата: Понедельник, 01.02.2016, 17:20 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1293
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
[vba]
Код

      Else: Exit Sub
    End If
    Application.EnableEvents = True
[/vba]
подозреваю, что при срабатывании условия выходит из процедуры до того как включит Эвентсы опять
тут тоже самое
[vba]
Код

Application.EnableEvents = False
    If Target.Cells.Count > 1 Then Exit Sub
[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение[vba]
Код

      Else: Exit Sub
    End If
    Application.EnableEvents = True
[/vba]
подозреваю, что при срабатывании условия выходит из процедуры до того как включит Эвентсы опять
тут тоже самое
[vba]
Код

Application.EnableEvents = False
    If Target.Cells.Count > 1 Then Exit Sub
[/vba]

Автор - Udik
Дата добавления - 01.02.2016 в 17:20
Udik Дата: Понедельник, 01.02.2016, 17:22 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1293
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Application.EnableEvents = True ' отключаем обработку событий

зарапортовался :) включаем же


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Application.EnableEvents = True ' отключаем обработку событий

зарапортовался :) включаем же

Автор - Udik
Дата добавления - 01.02.2016 в 17:22
_Boroda_ Дата: Понедельник, 01.02.2016, 17:24 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 9797
Репутация: 4138 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вот-вот. EnableEvents все портит. Если в теле макроса много выходов, то можно что-то типа вот так сделать. Если выходов мало и EnableEvents нужен только для маленького кусочка, то у Андрея ниже вообще классика.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = 0
    Application.EnableEvents = False
    If Target.Cells.Count > 1 Then GoTo A
    If Target.Value = "Заказ" Then
        Range("C16") = "этап2"
       ' Else: GoTo A
    End If
A:
    Application.EnableEvents = True
End Sub
[/vba]
С EnableEvents вообще очень аккуратно нужно. Я иногда даже допускаю, чтобы событие несколько раз отработало, лишь бы EnableEvents не выключать. Это, конечно, не есть хорошо, но на легких макросах "да и ладно"


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВот-вот. EnableEvents все портит. Если в теле макроса много выходов, то можно что-то типа вот так сделать. Если выходов мало и EnableEvents нужен только для маленького кусочка, то у Андрея ниже вообще классика.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = 0
    Application.EnableEvents = False
    If Target.Cells.Count > 1 Then GoTo A
    If Target.Value = "Заказ" Then
        Range("C16") = "этап2"
       ' Else: GoTo A
    End If
A:
    Application.EnableEvents = True
End Sub
[/vba]
С EnableEvents вообще очень аккуратно нужно. Я иногда даже допускаю, чтобы событие несколько раз отработало, лишь бы EnableEvents не выключать. Это, конечно, не есть хорошо, но на легких макросах "да и ладно"

Автор - _Boroda_
Дата добавления - 01.02.2016 в 17:24
RAN Дата: Понедельник, 01.02.2016, 17:29 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4297
Репутация: 839 ±
Замечаний: 0% ±

2010
Издержки копи-паста :)
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   '  Application.ScreenUpdating = 0 ' зачем?
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Cells.Value = "Заказ" Then
    Application.EnableEvents = False
        Range("C16") = "этап2"
    Application.EnableEvents = True
    End If
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеИздержки копи-паста :)
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   '  Application.ScreenUpdating = 0 ' зачем?
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Cells.Value = "Заказ" Then
    Application.EnableEvents = False
        Range("C16") = "этап2"
    Application.EnableEvents = True
    End If
End Sub
[/vba]

Автор - RAN
Дата добавления - 01.02.2016 в 17:29
Udik Дата: Понедельник, 01.02.2016, 17:34 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1293
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
или так
[vba]
Код

Private Sub W_Change(ByVal Target As Range)
    
    If Target.Cells.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    If Target.Cells.Value = "Заказ" Then Range("C16") = "этап2"
    Application.EnableEvents = True
End Sub
[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениеили так
[vba]
Код

Private Sub W_Change(ByVal Target As Range)
    
    If Target.Cells.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    If Target.Cells.Value = "Заказ" Then Range("C16") = "этап2"
    Application.EnableEvents = True
End Sub
[/vba]

Автор - Udik
Дата добавления - 01.02.2016 в 17:34
doober Дата: Понедельник, 01.02.2016, 17:34 | Сообщение № 8
Группа: Друзья
Ранг: Обитатель
Сообщений: 330
Репутация: 179 ±
Замечаний: 0% ±

Excel 2007
За вами не угонишся :'(




Сообщение отредактировал doober - Понедельник, 01.02.2016, 17:36
 
Ответить
СообщениеЗа вами не угонишся :'(

Автор - doober
Дата добавления - 01.02.2016 в 17:34
pabchek Дата: Понедельник, 01.02.2016, 17:46 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 664
Репутация: 147 ±
Замечаний: 0% ±

Excel 2007
Эээээ... я так быстро не успеваю переваривать. Придется брать работу на дом %)


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеЭээээ... я так быстро не успеваю переваривать. Придется брать работу на дом %)

Автор - pabchek
Дата добавления - 01.02.2016 в 17:46
pabchek Дата: Понедельник, 01.02.2016, 18:18 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 664
Репутация: 147 ±
Замечаний: 0% ±

Excel 2007
На понимание с моей стороны пока времени не было. Тем не менее, проверил все ваши предложения. Итог: _Boroda_, RAN, работают. Udik, к сожалению, нет. doober, работает, + еще и моя вторая хотелка сделана - спасибо! И всем большое спасибо! Теперь разобраться бы еще :)


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
СообщениеНа понимание с моей стороны пока времени не было. Тем не менее, проверил все ваши предложения. Итог: _Boroda_, RAN, работают. Udik, к сожалению, нет. doober, работает, + еще и моя вторая хотелка сделана - спасибо! И всем большое спасибо! Теперь разобраться бы еще :)

Автор - pabchek
Дата добавления - 01.02.2016 в 18:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос второй раз не срабатывает (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!