|
Не происходит обработка событий для TextBox (VBA)
|
|||
---|---|---|---|
#18+
Excell 2003, форму не создавал, элементы управления непосредственно на листе WorkSheet (в том числе и TextBox). Требуется ввести дату рождения человека и вычислить его полный возраст. Для исключения операторских ошибок оформил ввод даты в три приёма: день, месяц, год. (да, понятно что никто не запретит ввести 31 февраля, но пока закрыл на это глаза). Объект TextBox_BDay прекрасно принимает день рождения. Код: plaintext 1. 2. 3. 4.
С месяцем рождения та же петрушка, всё прекрасно. А вот с годом проблема. Длиннее 4-значной даты не введут, старше текущего года тоже не дам. А вот 1-, 2- и 3-значные значения года всё портят. Чтобы пофиксить нужна обработка пропадания курсора из поля ввода (TextBox6). Как только оператор сдвинул фокус в сторону, не закончив ввод года, TextBox примет нижнее пороговое значение. И все счастливы: Код: plaintext 1. 2. 3. 4.
Гуглил - народ регулярно находит эти грабли, но решения нет. Кто-то вышел из ситуации, заменив TextBox ComboBox'ом, кто-то написал: "Это решается с помощью класса. (Public WithEvents TextBox As MSForms.TextBox)... Но я пока классов не знаю". Может, кто-нибудь сталкивался? У меня вообще подозрение что без создания формы UserForm тут никак не обойтись. Или можно? С полным возрастом тоже не всё гладко: (ТекущаяДата - ДатаРождения)/365 правильного возраста не дают. Что-то придётся придумывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 14:56 |
|
Не происходит обработка событий для TextBox (VBA)
|
|||
---|---|---|---|
#18+
MOV AX BXСобытия Change и KeyPress обрабатываются прекрасно. Ни Click, ни DblClick, ни Enter не обрабатываются вообщеНу есссно - они же не в текстбоксе возникают! MOV AX BXДля исключения операторских ошибок оформил ввод даты в три приёма: день, месяц, год.лучше бы ты DatePicker прикрутил. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 15:30 |
|
Не происходит обработка событий для TextBox (VBA)
|
|||
---|---|---|---|
#18+
Спасибо! Я это чувствовал... наверное. Смена фокуса внутри формы, либо вообще нигде, так? Значит, придётся мостить поля на форме. Жаль. Хотя... А как же тогда быть с Cancel? Я пытался отловить момент когда Cancel становится False - что значит, фокус ушёл и ждать что оператор довведёт год больше не требуется. Проверяем чего он там навводил и добиваем если-таки накосячил. За ДейтПикер спасибо, понравился, воспользуюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 17:18 |
|
Не происходит обработка событий для TextBox (VBA)
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 17:54 |
|
Не происходит обработка событий для TextBox (VBA)
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Да, теперь дата в шоколаде. Спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 19:25 |
|
|
start [/forum/topic.php?desktop=1&fid=60&tid=2158609]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 127ms |
0 / 0 |