Страницы: 1
RSS
Заполнение TextBox в UserForm в формате дата
 
Здравствуйте!  
Помогите, пжл. Мозг скоро взорвётся.  
Возможно ли в TextBox из UserForm создать маску для заполнения?  
Я полазил по Нету нашёл некоторые варианты, один из которых использовал при написании для кнопки "Очистить строки", далше не увидел смысла.  
Сейчас для "Очистить строки" можно вводить дату, как набор из 6 цифр 281212, скажем. Программа значение преобразует в 28.12.2012 и очистит строку в столбце B. Но то, что пользователь будет видеть в TextBox - 281212, я считаю, будет мало информативно. В этой связи возникает вопрос:  
можно ли в TextBox создать маску ввода, чтобы при вводе значения 281212 и последующего нажатия клавиши Enter в ячейке (перед тем как выбрать "Очистку" или "Удаление") отобразилось значение 28/12/2012?  
Я понимаю, что проще, наверное, вывести MsgBox, что-нибудь "Данные за " & Date & " будут удалены." с кнопками ОК или Cancel, но я потратил много времени на решение этой проблемы и, мне кажется, что разгадка где-то рядом.  
Помогите, пжл, очень прошу Вас.  
Спасибо!
 
Private Sub TextBox_SearchText_Exit(ByVal Cancel As MSForms.ReturnBoolean)  
   With TextBox_SearchText  
       Select Case Len(.Value)  
       Case 6  
           .Value = Mid(.Value, 1, 2) & "." & Mid(.Value, 3, 2) & "." & 20 & Mid(.Value, 5, 2)  
       Case 10  
           .Value = .Value  
       Case Else  
           .Value = ""  
       End Select  
 
       If .Value Like "##.##.####" = True And IsDate(.Value) = True Then  
           If Format(DateValue(.Value), "dd.mm.yyyy") = .Value Then  
               .Value = .Value  
           Else  
               .Value = ""  
           End If  
       Else  
           .Value = ""  
       End If  
   End With  
End Sub
Excel 2007
 
{quote}{login=iba2004}{date=22.09.2012 07:31}{thema=Заполнение TextBox в UserForm в формате дата}{post}Я понимаю, что проще, наверное, вывести MsgBox...{/post}{/quote}Проще при клике по TextBox вызывать календарь, при помощи которого заполнять TextBox - исключаем ошибки.
 
2 ABC  
Снова от Вас помощь!!!  
Спасибо Вам!!!  
То, что хотел!  
 
2 Юрий М  
Юрий, я где-то видел похожее решение, но почему-то решил, что лучше обойдусь без него.  
Простите, а Вы не могли бы дать на него ссылку или, если у вас не займёт это много времени, подсказать здесь.  
Спасибо за помощь!
 
Небольшой пример на основе календаря из стандартных элементов (автор календаря Слэн).
 
2 ABC  
Посмотрел, переварил, разобрался... здОрово!!!  
Спасибо, Вам ещё раз!!!
 
2 Юрий М  
Спасибо, буду пережевывать!!! :о))  
Ребята, я восхищён вашими знаниями и навыками!!!  
Ещё раз "СПА-СИ-БО!!!"
 
2 Юрий М  
Блин! Мега-мозги!  
Я не перестаю удивляться!  
Посмотрел, вник.  
Спасибо!
 
Только там нужно будет добавить проверку на тот случай, если пользователь закрыл календарь крестиком. Вот в этом случае выдавать предупреждение.
 
2 Юрий М  
Ок! Я не так быстр в своих рассуждениях, как Вы! :о))  
На то, что Вам требуется минута, мне минимум нужен час.  
Я прислушался к Вашему совету и обязательно сделаю проверку на "крестик".  
А Вы ещё не могли бы подсказать, никак не смог найти, по умолчанию курсор попадает на "Удалить строки", а мне бы нужно на "Очистить".  
Спасибо!
 
Если правильно понял вопрос: правый клик по форме - Tab Order и перемещайте контролы в нужной очерёдности. Ещё можно поменять в свойствах каждого контрола его TabIndex, но это дольше. Если нужно принудительно на какой-то операции, то НужныйКонтрол.SetFocus
 
2 Юрий М  
Да, именно об этом я спрашивал!!!  
Благодаря Вам всё получилось!!!  
Стотысячный раз Вам "СПАСИБО"! :о))
 
Вот! Написал симбиоз!!!  
При клике на TextForm выплывает календарь, при вводе даты в TextForm руками, обязательно нужно нажать Enter, чтобы даты, введённые как 150912 или 15.09.12 или 15092012 или 15.09.2012 превратились в нужный нам формат 15.09.2012. Если вдруг человек нечаянно вызвал календарь, а затем решил ввести дату руками, то жмём на крестик календаря. (Привет Юрию :о)))  
 
Ещё раз Спасибо АВС и Юрию. Я использовал помощь обоих. Если кому нужно, не стесняйтесь, берите файл.  
 
Но м.б. будут найдены какие-то недостатки.  
Буду благодарен всем, указавшим на них.  
 
Удачи!  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
попробуйте так  
 
Private Sub UserForm_Activate()  
If UserForm1.TextBox_SearchText.Value = "" Then  
Call setcal(Date)  
Else  
Call setcal(CDate(UserForm1.TextBox_SearchText.Value))  
End If  
End Sub
Excel 2007
 
2 ABC  
Здравствуйте.  
Я правильно понимаю, что это обрубает щупальцы спруту тогда, когда в TextBox пустота?  
Или я неправ?
 
Ещё раз выклыдываю файл, теперь в архиве. На радостях не обратил внимания, что он на 3 кило тяжелее, оговоренных Правил  
Приношу извинения.
 
когда ТекстБокс пуст, календарь показывает сегодняшний день  
если не пуст тогда дату ТекстБокса  
--41442--
Excel 2007
 
2 ABC  
Спасибо!  
Я для тётенек эту прогу ваяю. И так уже: и в таком формате Вам дату и в сяком. :о))  
Мне кажется, что если дата не найдена, пусть пустота отстаётся. Или в этом есть какой-то смысл, который я не улавливаю?
 
1. Запретить вообще ввод с клавиатуры (раз уж используем календарь).  
2. Контролировать не TextBox, а событие выгрузки формы с календарём: если дата "нулевая" - снова показывать календарь.  
Думаю, что так будет верно.
 
2 Юрий М  
Спасибо! Ваше мнение мне ценно!  
Но не хотелось бы запрещать ввод с клавиатуры, потому как, окажется, что в сентябре нужно удалить декабрьскую сделку и могут ныть начать, что назад приходится долго щёлкать, искать нужную дату небыстро. А так захотели воспользовались календарем, не захотели  - ввели в формате, какой для себя определят. Если будет сказано, что принято решение вводить в таком-то формате, остальные рубану нах... , ой, нафиг! :о))  
Осюда и с календарём ноги растут. Если вдруг нечаянно кликнули на TextBox, а потом вдруг решили закатить дату руками.  
Как мужчина с мужчиной я с Вами согласен. Привводе с календаря и контроль строже и формат уникальный. Но это ж тётеньки. :о)) Одной так будет удобнее, другой сяк. Нам их не понять. :о))  
Согласны?
 
"Шеф сказал - пусть будет уголовник" (с) :-)  
Если в следующий раз надумаете делать что-то аналогичное, но с запретом ручного ввода - можно использовать Label вместо TextBox.
 
2 Юрий М  
;о)))  
Спасибо Вам за теплое отношение и "постановку на путь истинный"!!! :о))  
Обязательно буду иметь ввиду Ваш совет!
Страницы: 1
Наверх