Esto se hace de manera directa, conforme se va tecleando la entrada.
“Dcdni” es el DataControl o TextBox del DNI y “Controles” es el contenido de
la propiedad Group del resto de DataControles o TextBoxes.
El “BotonSalir” permite abandonar el formulario en cualquier momento.
Private dnibien As Boolean
Private Const letradni As String = "TRWAGMYFPDXBNJZSQVHLCKE"
Public Sub Form_Open()
dnibien = False
End
Public Sub DCdni_KeyPress()
Dim n As Integer
Select Case Key.Code
Case key.BackSpace
Case key.Delete
Case key.Tab
Case Key.Right
Case Key.Left
Case Key.Home
Case Key.End
Case Key.Esc
Me.Close
Case Else
n = Len(DCdni.value)
If n < 8 And IsDigit(Key.text) Then
Return
Else If n = 8 And IsLetter(Key.text) Then
Return
Else
Stop Event
Endif
End Select
End
Public Sub Controles_gotfocus()
Dim n As Integer
If Len(DCdni.Value) <> 9 Then
Message("Tiene que teclear un DNI adecuado (8 dígitos y una letra")
DCdni.SetFocus
Return
Endif
DCdni.Value = UCase$(DCdni.Value)
n = CInt(Left$(DCdni.value, 8)) Mod 23
If Mid$(letradni, n + 1, 1) <> Right$(DCdni.value, 1) Then
Message.Warning("La letra del DNI es incorrecta. Corríjala.")
DCdni.value = Left$(DCdni.value, 8)
DCdni.SetFocus
Return
Endif
dnibien = True
End
Public Sub BotonSalir_Click()
Me. Close
End
Private Const letradni As String = "TRWAGMYFPDXBNJZSQVHLCKE"
Public Sub Form_Open()
dnibien = False
End
Public Sub DCdni_KeyPress()
Dim n As Integer
Select Case Key.Code
Case key.BackSpace
Case key.Delete
Case key.Tab
Case Key.Right
Case Key.Left
Case Key.Home
Case Key.End
Case Key.Esc
Me.Close
Case Else
n = Len(DCdni.value)
If n < 8 And IsDigit(Key.text) Then
Return
Else If n = 8 And IsLetter(Key.text) Then
Return
Else
Stop Event
Endif
End Select
End
Public Sub Controles_gotfocus()
Dim n As Integer
If Len(DCdni.Value) <> 9 Then
Message("Tiene que teclear un DNI adecuado (8 dígitos y una letra")
DCdni.SetFocus
Return
Endif
DCdni.Value = UCase$(DCdni.Value)
n = CInt(Left$(DCdni.value, 8)) Mod 23
If Mid$(letradni, n + 1, 1) <> Right$(DCdni.value, 1) Then
Message.Warning("La letra del DNI es incorrecta. Corríjala.")
DCdni.value = Left$(DCdni.value, 8)
DCdni.SetFocus
Return
Endif
dnibien = True
End
Public Sub BotonSalir_Click()
Me. Close
End