Необходимое предисловие читателям моего сайта, сайта “Проза Ру”, “Самиздат”, “фАбрика” и всех прочих глубокоуважаемых ресурсов:
Безусловно, нижеследующий текст не относится к разряду классической литературы. Но чувства и страсти, пережитые мной в ПРОЦЕССЕ, заставили меня в этом усомниться.
Конечно, полностью и легко понятным мой роман будет только квалифицированным программистам или людям ПЕРЕЖИВШИМ уже подобное, но ведь предполагается же, что читатель ВЛАДЕЕТ тем языком, на котором написано литературное произведение?
ЧАСТЬ ВТОРАЯ
24 05 02
Сказать по совести переменные типа дата дают мне покоя не.
Пытаюсь автоматически переводить фокус на кнопку счета, если заполнение полное и правильное. На ввод даты правильно должен перескакивать фокус. Однако это происходит уже на первой цифре после слэша. Почему?
Как задать границы, разрядность, вид в котором будет отображаться результат - например разделять тысячи точкой
Private Sub Text1_Change()
C1.Visible = True
If IsDate(Text1.Text) Then
C1.SetFocus
Else: Exit Sub
End If
End Sub
Else
d1 = Text1.Text
C1.Caption = "Попробуйте быть честнее!"
If Year(d2 - d1) > 99 Or Year(d2 - d1) < 6 Then
MsgBox "Пытаетесь шутить?"
Text1.Text = ""
Выводы из семичасового безумия следующие:
Проверь переменную. Если она неправильная переменная, сбросить в бокс и EndSub если правильная тогда ее ПРИСВОИТЬ и уже после этого проверять по кругу сбрасывая ошибки в EndSub. Круг таков:
If then Exit sub else if then exit sub
....
Option Explicit
Public d1 As Date, d2 As Date, d3, b, a, f
Private Sub C1_Click()
d2 = Date
C1.Visible = False
If Not IsDate(Text1.Text) Then
MsgBox "Пожалуйста, обратите внимание: первые две цифры - номер месяца." & vbCrLf & _
"вторые две - число." & "Четыре последних - год полностью." & vbCrLf & vbCrLf & _
"Разделяйте числа косой черточкой: /" & vbCrLf & _
"Должно получиться примерно так: 08/20/1970" & vbCrLf & _
"Попробуйте еще разок!"
L1.Caption = "Введите пожалуйста дату своего рождения так:"
Exit Sub
Else
d1 = Text1.Text
If Year(d2 - d1) - 1900 > 99 Or Year(d2 - d1) < 5 Then
MsgBox " Тобою прожито: " & d3 & " дней, " & vbCrLf & " что означает " _
& d3 * 24 & " часов, " & vbCrLf & _
" которые, между прочим, состояли из " & d3 * 24 * 60 & " минут " & vbCrLf & _
" или же " & d3 * 24 * 60 * 60 & " секунд "
MsgBox " На что, скажи, ушла" & vbCrLf & "ТАКАЯ ПРОРВА" & vbCrLf & "времени?"
Text1.Text = ""
End If
End If
End Sub
Private Sub Text1_Change()
C1.Visible = True
L1.Caption = "две цифры - месяц, две - число, четыре - год"
End Sub
Долго не мог рискнуть поставить два оператора End If рядом, организовав как бы цикл в цикле. Сделав это отрезал полкилограмма кода.
Суть проблемы состояла как всегда в обработчике ошибок. Я пытался добиться одного ответа на неверный формальный ввод и другого ответа на фактически неверный. Ой, это было тяжко, едва не бросил все ошибки в одно окошко. Но вспомнив, как это неприятно на разные ошибки получать одинаковые ответы, довел, добил, дожал...
Последний штрих - разные сообщение на ввод слишком старой или слишком юной даты...
Private Sub C1_Click()
d2 = Date
C1.Visible = False
If Not IsDate(Text1.Text) Then
MsgBox "Пожалуйста, обратите внимание: первые две цифры - номер месяца." & vbCrLf & _
"вторые две - число." & "Четыре последних - год полностью." & vbCrLf & vbCrLf & _
"Разделяйте числа косой черточкой: /" & vbCrLf & _
"Должно получиться примерно так: 08/20/1970" & vbCrLf & _
"Попробуйте еще разок!"
L1.Caption = "Введите пожалуйста дату своего рождения так:"