Hola,
Aqui te muestro dos funciones, una que comprueba si el DNI es correcto y otra que te muestra la letra que corresponde a un DNI dado.
'Muestra la letra del DNI
Function mostrar_letra (DNI as Long)
Dim posicion As Variant
Dim cadena As String
Dim letras() As String
cadena = "T,R,W,A,G,M,Y,F,P,D,X,B,N,J,Z,S,Q,V,H,L,C,K,E,T"
letras = Split(cadena, ",")
posicion = Int(DNI / 23)
posicion = DNI - (posicion * 23)
MsgBox letras(posicion)
End Function
'Funcion que comprueba si un DNI es valido o no. Devuelve:
' 0 -> si es nulo o esta vacio.
' 1 -> Si el formato es valido asi como la letra.
' 2 -> Si la letra del DNI es invalida.
' 3 -> Si el DNI es valido.
Function Validar_DNI(DNI As String) As Integer
Dim Letra
Letra = "TRWAGMYFPDXBNJZSQVHLCKE"
If DNI = "" Then
Validar_DNI = 0
Exit Function
End If
DNI = UCase(DNI)
If Len(DNI) <> 9 Then
Validar_DNI = 1
Exit Function
End If
If IsNumeric(Left(DNI, Len(DNI)-1)) = False Then
Validar_DNI = 1
Exit Function
End If
If Right(DNI, 1) < "A" Or Right(DNI, 1) > "Z" Then
Validar_DNI = 1
Exit Function
End If
If Mid(Letra, (Left(DNI, Len(DNI)-1) Mod 23) + 1, 1) <> Right(DNI, 1) Then
Validar_DNI = 2
Exit Function
End If
Validar_DNI = 3
End Function
Espero que te sirva.
Saludos.