Aquí tienes una rutina simple que te permitirá validar un NIF:
Public Function validar_NIF(ByVal dato As String) As Boolean
Const tabla = "TRWAGMYFPDXBNJZSQVHLCKE"
Dim error As Boolean
Dim numero As Long
Dim nif As String
Dim car As String, letra As String
error = False
nif = Trim(dato)
´ Obtenemos el caracter derecho del NIF
car = UCase$(Right$(nif, 1))
´ Aislamos el resto de caracteres
nif = Left$(nif, Len(nif) - 1)
If Not IsNumeric(nif) Then
´ Número de NIF incorrecto
error = True
Else
´ Obtenemos el valor del DNI y la letra que le corresponde
numero = CLng(nif)
letra = Mid$(tabla, numero Mod 23 + 1, 1)
If letra <> car Then
´ La letra obtenida es diferente de la proporcionada
error = True
End If
End If
validar_NIF = Not error
End Function
Esta rutina puede servirte como base; para mejorarla puedes hacer que compruebe primero si el caracter derecho es una letra o no o si se han introducido más caracteres de los permitidos. También podrías utilizar el algoritmo proporcionado para obtener la letra correspondiente y añadirla en caso de que no se haya dado, informando al usuario de esta acción.