Страницы: 1
RSS
Иногда не срабатывает макрос при обработке событий KeyPress
 
Доброго времени суток, уважаемые форумчане!

При обработке событий KeyPress для TextBox иногда не срабатывает макрос.
Т.е. если в коде написано например:

If InStr(1,TextBox1.text,",") Then KeyAscii=0 (если текстбокс содержит запятую, то отменить ввод)

То в большинстве случаев код корректно отрабатывается, но бывает когда он пропускает это и позволяет вводить "до посинения" (прямо мистика какая-то)

С чем это связано, что необходимо добавить в код?

Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Проще всего так (не даем занести в поле запятую):
Код
Private Sub TextBox1_Change()
  Application.EnableEvents = False
  TextBox1.Value = Replace(TextBox1.Value, ",", "")
  Application.EnableEvents = True
End Sub
Владимир
 
1. Надо понять, запятая вообще не нужна или не нужна только в том случае, если одна в текстбоксе уже есть?
2. sokol92, EnableEvents для контролов форм не работает, только для событий листов и книг. Чтобы предотвратить зацикливание в событийных процедурах форм надо создавать отдельную переменную-флаг:
Код
Private Sub TextBox1_Change()
  if IsEvents then
  IsEvents = False
  TextBox1.Value = Replace(TextBox1.Value, ",", "")
  IsEvents = True
  end if
End Sub
Но даже если запятая вообще не нужна, то проще отследить код KeyAscii через тоже событие KeyPress. Это код 44.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Здравствуйте, Дмитрий! Спасибо за уточнение (постоянно про это забываю)!
При копировании в поле из буфера обмена KeyPress вряд ли поможет. К тому же еще и подмигивает :)  
Владимир
 
Цитата
sokol92 написал:
При копировании в поле из буфера обмена
ну это да.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дело не в том нужна или нет запятая. Я этот код привёл для примера. А дело в том что иногда, не понятно по какой причине, перестаёт обрабатывать код в событиях KeyPress, KeyUp, Change для текстбоксов. Выгрузишь форму и снова загрузишь - начинает опять работать. В чём дело - не пойму. Ошибок никаких не возникает, просто перестаёт обрабатывать.
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Цитата
Artem1977 написал:
При обработке событий KeyPress для TextBox иногда не срабатывает макрос
Цитата
Artem1977 написал:
дело в том что иногда перестаёт обрабатывать код в событиях KeyPress, KeyUp, Change
Вы бы сразу так написали и не вводили в заблуждение. В данном случае вряд ли получится что-то вменяемое посоветовать без файла, в котором это все происходит. Пробовали ставить точки останова в этих процедурах? Чтобы понять - событие вообще отслеживается? Если нет - скорее всего проблема либо в файле(это можно проверить, перенеся формы и коды руками в другой файл), либо уже в самом Excel.
Изменено: Дмитрий Щербаков - 14.03.2018 11:06:44
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий Щербаков написал:
Вы бы сразу так написали и не вводили в заблуждение
Извините, не верно описал проблему

Цитата
Дмитрий Щербаков написал:
Чтобы понять - событие вообще отслеживается?
Вот именно что перестаёт отслеживаться. Т.е. ничего не происходит, никак не реагирует на возникающие события
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Цитата
Дмитрий Щербаков написал:
вряд ли получится что-то вменяемое посоветовать без файла, в котором это все происходит
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков,
Файл большой и смысла особого не вижу выкладывать его, т.к. этот код уже неоднократно приводился здесь - ввод в текстбокс только числовых значений.
Просто иногда происходит необъяснимый глюк и события просто не отслеживаются. Выгрузишь форму, снова загрузишь - всё работает.
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Цитата
Artem1977 написал:
смысла особого не вижу выкладывать его
Тогда и обсуждать не имеет смысла. Ведь проблема только у Вас :) А проблема явно не в коде, который здесь неоднократно приводился, не так ли? У меня эти события ни разу не глючили. Значит проблема либо в Вашем файле, либо в Вашем Excel.  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх