Как объяснено в ответе Билла , вам следует использовать событие Validate
.
Я просто хотел бы добавить, что в вашем коде все еще есть недостаток, то есть он позволитпользователям вводить десятичные числа (например, 1900.10).Чтобы избежать этого, вы можете добавить еще одно условие:
Private Sub txtYear_Validate(Cancel As Boolean)
If Not IsNumeric(txtYear.Text) Then
txtYear.Text = ""
ElseIf txtYear.Text < 1900 Or txtYear.Text > Year(Date) Then
txtYear.Text = ""
ElseIf Fix(txtYear.Text) <> txtYear.Text Then ' Choose one:
txtYear.Text = Fix(txtYear.Text) ' - Replace it with the integer part.
'txtYear.Text = "" ' - Clear the text.
End If
End Sub