|
Responder ![]() |
Autor | |
jorros ![]() Habitual ![]() ![]() Unido: 20/Octubre/2008 Localización: España Estado: Sin conexión Puntos: 140 |
![]() Enviado: 09/Junio/2023 a las 11:46 |
Buenos días Estoy intentando validar en un campo el DNI/NIE de
trabajadores. El problema me surge cuando pretendo dar de alta un DNI
con ocho dígitos y al final una letra. Cuando el DNI empieza por “0” la función,
creo que lo pasa a número y elimina los ceros por la izquierda y me dice que el
DNI no es correcto. Por mucho que lo repaso no soy capaz de encontrar el error, agradecería una ayuda. El código lo he adaptado de esta contestación de NECKITO
en todoexpertos El código es el siguiente: Private
Function NIF(Dni As Long) NIF =
Dni & Mid$("TRWAGMYFPDXBNJZSQVHLCKEº", (Dni Mod 23) + 1, 1) End
Function Private
Sub CIF_AfterUpdate() If
Len(Me.CIF.Value) <> 9 Then MsgBox "El DNI / NIE debe
terner en total 9 digitos y este no cumple con ese criterio"
Me.Tfe.SetFocus
Me.CIF.SetFocus Exit Sub Else Dim
elNIF As String Dim
primerCaracter As String Dim
VaNIfDup As Integer elNIF = UCase(Me.CIF.Value) 'Cogemos el valor
introducido pasándolo a mayúsculas primerCaracter
= Left(elNIF, 1)
'Obtenemos el primer carácter Select Case primerCaracter 'Miramos el
primer carácter Case
"X"
'El carácter es una X elNIF =
CStr(Right(elNIF, Len(elNIF) - 1))
'Cogemos los valores numéricos elNIF =
"X" & NIF(Val(elNIF)) 'Sacamos la letra Case "Y"
'El carácter es una Y elNIF =
"1" & CStr(Right(elNIF, Len(elNIF) - 1)) 'Sustituimos la Y por un 1 elNIF =
"Y" & NIF(Val(elNIF)) 'Sacamos la letra elNIF =
"Y" & Right(elNIF, 8) Case "Z"
'El carácter es una Z elNIF =
"2" & CStr(Right(elNIF, Len(elNIF) - 1)) 'Sustituimos la Z por un 2 elNIF =
"Z" & NIF(Val(elNIF)) 'Sacamos la letra elNIF = "Z" &
Right(elNIF, 8) Case
Else elNIF = NIF(Val(elNIF)) 'Es un DNI no
extranjero End
Select If StrComp(Me.CIF.Value, elNIF, 1) = 0 Then VaNIfDup =
Nz(DCount("[EmpNif]", "TbEmpleados ", "[EmpNif]=
[CIF]"), 0) If VaNIfDup <> 0 Then MsgBox " El NIF / NIE
introducido ya existe, por favor comprueben"
Me.CIF.Value = ""
Me.Tfe.SetFocus
Me.CIF.SetFocus Exit Sub Else End If
Me.CIF.Value = elNIF 'Escribimos el
valor obtenido en el campo txtDNI Else MsgBox
"El Cif introducido no es correcto, intentelo de nuevo"
Me.CIF.Value = ""
Me.Tfe.SetFocus Me.CIF.SetFocus End If End If End Sub Un saludo |
|
![]() |
|
xavi ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14630 |
![]() |
Hola,
Sim entrar en detalle sobre tu código (ando pilladisimo de tiempo), yo tengo este otro código de Enrique Martinez desde hace muchísimo tiempo (obviamente la lógica es la misma pero desarrollada de otra forma)
Ese código parece funcionar con DNI de 7 u 8 numeros. Un saludo
|
|
![]() |
|
jorros ![]() Habitual ![]() ![]() Unido: 20/Octubre/2008 Localización: España Estado: Sin conexión Puntos: 140 |
![]() |
Gracias
|
|
![]() |
|
jorros ![]() Habitual ![]() ![]() Unido: 20/Octubre/2008 Localización: España Estado: Sin conexión Puntos: 140 |
![]() |
Este apaño me saca del paso
Una linea antes de End
Select elNIF =
Left(String(9 - (Len(elNIF)), "0") & elNIF, 9) Con esto consigo que me rellene por la izquierda de ·0· hasta completar 9 dígitos. Imagino que habrá maneras mas elegantes de conseguirlo, si a alguien se le ocurre alguna por favor que lo indique. Un saludo y por mi se puede cerrar el hilo. Editado por jorros - 09/Junio/2023 a las 20:17 |
|
![]() |
|
happy ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador ![]() Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3190 |
![]() |
Para rellenar con ceros a la izquierda un número y asignarlo a un String yo utilizo format, para tu caso sería:
elNIF = Format(elNIF, "000000000") |
|
Saludos,
Juan M. Afan de Ribera |
|
![]() |
|
jorros ![]() Habitual ![]() ![]() Unido: 20/Octubre/2008 Localización: España Estado: Sin conexión Puntos: 140 |
![]() |
Mas elegante y menos rebuscado, GRACIAS
|
|
![]() |
Responder ![]() |
|
Tweet
|
Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |