Voy a suponer que escribes el DNI en el campo [txtDNI], que es coincidente con el campo que te guarda el DNI con la letra.
En tu formulario, en ese campo donde escribes el DNI, sacas sus propiedades y te vas a la pestaña Eventos -> Después de actualizar, y le generas el siguiente código:
...
Private Sub...
Dim elNIF As String
Dim primerCaracter As String
'Cogemos el valor introducido pasándolo a mayúsculas
elNIF = UCase(Me.txtDni.Value)
'Obtenemos el primer carácter
primerCaracter = Left(elNIF, 1)
'Miramos el primer carácter
Select Case primerCaracter
Case "X" 'El carácter es una X
'Cogemos los valores numéricos
elNIF = CStr(Right(elNIF, Len(elNIF) - 1))
'Sacamos la letra
elNIF = "X" & NIF(Val(elNIF))
Case "Y" 'El carácter es una Y
'Sustituimos la Y por un 1
elNIF = "1" & CStr(Right(elNIF, Len(elNIF) - 1))
'Sacamos la letra
elNIF = "Y" & NIF(Val(elNIF))
Case "Z" 'El carácter es una Z
'Sustituimos la Z por un 2
elNIF = "2" & CStr(Right(elNIF, Len(elNIF) - 1))
'Sacamos la letra
elNIF = "Z" & NIF(Val(elNIF))
Case Else
'Es un DNI no extranjero
elNIF = NIF(Val(elNIF))
End Select
'Escribimos el valor obtenido en el campo txtDNI
Me.txtDni.Value = elNIF
End Sub
...
Para escribir ese código se te habrá abierto el editor de VB en el módulo asociado en el formulario. Entonces ahí, bajo la primera línea que te aparece (Option Explicit), escribes la siguiente función:
...
Private Function NIF(DNI As Long)
NIF = DNI & Mid$("TRWAGMYFPDXBNJZSQVHLCKE", (DNI Mod 23) + 1, 1)
End Function
...
Ahora, cuando escribas un DNI en el campo correspondiente automáticamente se te sustituirá por el NIF.
Para un NIE tendrás que escribir la primera letra del NIE y la numeración, y el código te sacará la última letra que corresponda.
Excelente, gracias! - Miguel Prado
Gracias neckkito Un saludo - Ximo Ximo