powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не происходит обработка событий для TextBox (VBA)
5 сообщений из 5, страница 1 из 1
Не происходит обработка событий для TextBox (VBA)
    #37318073
MOV AX BX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Excell 2003, форму не создавал, элементы управления непосредственно на листе WorkSheet (в том числе и TextBox).
Требуется ввести дату рождения человека и вычислить его полный возраст. Для исключения операторских ошибок оформил ввод даты в три приёма: день, месяц, год. (да, понятно что никто не запретит ввести 31 февраля, но пока закрыл на это глаза).
Объект TextBox_BDay прекрасно принимает день рождения.
Код: plaintext
1.
2.
3.
4.
Private Sub TextBox4_KeyPress(ByVal KeyASCII As MSForms.ReturnInteger)
    If KeyASCII <  48  Or KeyASCII >  57  Then
        KeyASCII =  0 
    End If
End Sub
не позволит врагу ввести букву либо отрицательное число.
С месяцем рождения та же петрушка, всё прекрасно. А вот с годом проблема. Длиннее 4-значной даты не введут, старше текущего года тоже не дам. А вот 1-, 2- и 3-значные значения года всё портят. Чтобы пофиксить нужна обработка пропадания курсора из поля ввода (TextBox6). Как только оператор сдвинул фокус в сторону, не закончив ввод года, TextBox примет нижнее пороговое значение. И все счастливы:
Код: plaintext
1.
2.
3.
4.
Private Sub TextBox6_Exit(ByVal cancel As MSForms.ReturnBoolean)
    If TextBox6.Value <  1899  Then
        TextBox6.Value = "1900"
    End If
End Sub
А не тут-то было... События Change и KeyPress обрабатываются прекрасно. Ни Click, ни DblClick, ни Enter не обрабатываются вообще: Cancel = True и всё.
Гуглил - народ регулярно находит эти грабли, но решения нет. Кто-то вышел из ситуации, заменив TextBox ComboBox'ом, кто-то написал: "Это решается с помощью класса. (Public WithEvents TextBox As MSForms.TextBox)... Но я пока классов не знаю".
Может, кто-нибудь сталкивался? У меня вообще подозрение что без создания формы UserForm тут никак не обойтись. Или можно?

С полным возрастом тоже не всё гладко: (ТекущаяДата - ДатаРождения)/365 правильного возраста не дают. Что-то придётся придумывать.
...
Рейтинг: 0 / 0
Не происходит обработка событий для TextBox (VBA)
    #37318177
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MOV AX BXСобытия Change и KeyPress обрабатываются прекрасно. Ни Click, ни DblClick, ни Enter не обрабатываются вообщеНу есссно - они же не в текстбоксе возникают!

MOV AX BXДля исключения операторских ошибок оформил ввод даты в три приёма: день, месяц, год.лучше бы ты DatePicker прикрутил.
...
Рейтинг: 0 / 0
Не происходит обработка событий для TextBox (VBA)
    #37318443
MOV AX BX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Я это чувствовал... наверное. Смена фокуса внутри формы, либо вообще нигде, так? Значит, придётся мостить поля на форме. Жаль.

Хотя... А как же тогда быть с Cancel? Я пытался отловить момент когда Cancel становится False - что значит, фокус ушёл и ждать что оператор довведёт год больше не требуется. Проверяем чего он там навводил и добиваем если-таки накосячил.


За ДейтПикер спасибо, понравился, воспользуюсь.
...
Рейтинг: 0 / 0
Не происходит обработка событий для TextBox (VBA)
    #37318544
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Private Sub Text1_LostFocus()
'здесь событие при потере фокуса контролом
...
...
Рейтинг: 0 / 0
Не происходит обработка событий для TextBox (VBA)
    #37318697
MOV AX BX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub TextBox6_Change() ' Год рождения
    If TextBox6.Value >  2011  Then
        TextBox6.Value = "1900"
        End
    End If
End Sub
Private Sub TextBox6_lostfocus()
    If TextBox6.Value <  1899  Then
        TextBox6.Value =  1900 
    End If
    Call DateBirth
End Sub
Private Sub TextBox6_KeyPress(ByVal KeyASCII As MSForms.ReturnInteger)
    If KeyASCII <  48  Or KeyASCII >  57  Then
        KeyASCII =  0 
    End If
End Sub
Private Sub DateBirth() 'Формируем дату из 3 полей ввода
    Dim BirthT As Variant
    Dim Birth As Date
    BirthT = TextBox4.Value & "-" & TextBox5.Value & "-" & TextBox6.Value
    Birth = CVDate(BirthT)
    Range("h7").Value = Birth
    End Sub
.
Да, теперь дата в шоколаде. Спасибо!!!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не происходит обработка событий для TextBox (VBA)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]