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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2018, 10:01   #1
tungsten
Пользователь
 
Регистрация: 05.11.2012
Сообщений: 16
По умолчанию Произвольный? возврат в управляющую конструкцию после выхода из нее

Доброго времени, друзья!
Никогда такого небыло и вот опять...
Чувствую некий пробел в знаниях...
Excel 2016 VBA
Процедура обрабатывает событие изменения TextBox'a, с целью оставить только положительное значение и предотвратить ввод символов отличных от цифр.
Код:
1. Private Sub SumBox_change()
2. If Not IsNumeric(SumBox.value) Or SumBox.value < 0 Then
3. SumBox.value = ""
4. MsgBox "Сумма должна быть положительной!"
5. End If
6. End Sub
Ввожу символ вне диапазона. По дебаггеру процедура выполняется полностью, строки 1-6. Затем после строки 6 возвращается снова на строку 4! затем штатно 5,6.
Вот поясните мне, пожалуйста, чем вызвано это поведение?
Повторение мать учения...
я понимаю если бы были метки перехода, вызовы, цикл, ну или хотя-бы начал сначала процедуру...
tungsten вне форума Ответить с цитированием
Старый 17.05.2018, 10:05   #2
tungsten
Пользователь
 
Регистрация: 05.11.2012
Сообщений: 16
По умолчанию

сам косяк... рекурсию вызвал...
tungsten вне форума Ответить с цитированием
Старый 17.05.2018, 10:10   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно выключить.

перед изменением
Код:
    Application.EnableEvents = False
после
Код:
    Application.EnableEvents = True
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2018, 10:50   #4
tungsten
Пользователь
 
Регистрация: 05.11.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
можно выключить.
В sql можно триггеры отключать, подумал что было бы неплохо делать то же самое в VBA...
Спасибо за подсказку! Буду пользоваться!
tungsten вне форума Ответить с цитированием
Старый 17.05.2018, 11:29   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Application.EnableEvents не влияет на события элементов управления! Можно так
Код:
Private Sub SumBox_change()
Static busy As Boolean
  If busy Then Exit Sub
  If Not IsNumeric(SumBox.Value) Or SumBox.Value < 0 Then
    busy = True
    SumBox.Value = ""
    busy = False
    MsgBox "Сумма должна быть положительной!"
  End If
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 17.05.2018, 11:33   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Application.EnableEvents не влияет на события элементов управления!
Приношу свои извинения за то, что ввёл в заблуждение!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделать конструкцию выхода из циклов qqq`` Общие вопросы Delphi 2 19.10.2017 23:09
Возврат id после запроса Festovec БД в Delphi 4 16.03.2016 17:06
Программа после выхода из функции прыгает на другую строчку. zipwind C++ Builder 1 09.05.2011 18:46
Запоминание Checked после выхода из проги в MainMenu NuR1k Общие вопросы Delphi 2 24.08.2010 19:26
Отключается звук после выхода из ждущего режима Костян Пират Операционные системы общие вопросы 4 18.12.2009 14:23