Формат цифры (дата) в тексбоксе
Спасибо!!!
Надо вбить дату, но как в умных прогах, т.е. точки уже стоят и стоят всегда, а вбивается только дд мм гггг. без точек.
Вот пример упрощенный. Работает в режиме замещения и без проверки на инвалидность
Dim str0 As String, i As Integer, ii As Integer
Private Sub CommandButton1_Click()
str0 = " / / "
TextBox1.Text = " / / "
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode < 48 Then Exit Sub
For i = 1 To 8
If Mid(str0, i, 1) <> Mid(TextBox1.Text, i, 1) Then
If i = 3 Then
Mid(str0, 5, 1) = Mid(str0, 4, 1)
Mid(str0, 4, 1) = Mid(TextBox1.Text, 3, 1)
TextBox1.Text = str0
i = i + 1
ElseIf i = 6 Then
Mid(str0, 8, 1) = Mid(str0, 7, 1)
Mid(str0, 7, 1) = Mid(TextBox1.Text, 6, 1)
TextBox1.Text = str0
i = i + 1
Else
str0 = TextBox1.Text
End If
SendKeys "{HOME}"
For ii = 1 To i
SendKeys "{RIGHT}"
Next ii
Exit For
End If
Next i
End Sub
(хоть текст на экране выглядит сумбурно, но ты его скопируй в текстовый редактор и будет все ОК)
'*************************************************************************************
'***************************** Обработка даты ****************************************
'*************************************************************************************
sub DateKeyUp(oDate, vType)
oDate.value = replace(oDate.value, ",", ".")
'если дозволено пустое значение и это оно и есть, то выходим
if (not vType and oDate.value = "") then
oDate.ClassName = "Normal"
exit sub
end if
'определяем количество точек
aDatePoints = split(oDate.value, ".")
vError = true
select case UBound(aDatePoints)
case 2 'точки
if isnumeric(aDatePoints(0)) and isnumeric(aDatePoints(1)) then
if isdate(oDate.value) and len(aDatePoints(2)) > 1 and aDatePoints(0) < 32 and aDatePoints(1) < 13 then
vError = false
end if
end if
case 1 'точка
if len(oDate.value) > 5 then
oDate.value = left(oDate.value, 5) & "." & right(oDate.value, len(oDate.value) - 5)
end if
case 0 'точкек
if len(oDate.value) > 2 then
oDate.value = left(oDate.value, 2) & "." & right(oDate.value, len(oDate.value) - 2)
end if
if len(oDate.value) > 5 then
oDate.value = left(oDate.value, 5) & "." & right(oDate.value, len(oDate.value) - 5)
end if
case else
oDate.ClassName = "ErrorValue"
end select
if vError then
oDate.ClassName = "ErrorValue"
else
oDate.ClassName = "Normal"
end if
end sub