Visual Basic - Problemilla

Life is soft - evento anual de software empresarial
 
Vista:

Problemilla

Publicado por Alberto (1 intervención) el 25/08/2008 14:55:19
Hola llevo un par de dias buscando una solución para la validación de CIF.
Tengo hecha un macro en el excel y configurado mediante visual.
Voy a poner todo el código y luego detallo donde me está fallando y lo que me dice...
Esta entre unas lineas /////////////////////////////////////

Public Function VALIDAR_CIF(ByVal valor As String) As Boolean

Dim strLetra As String, strNumero As String, strDigit As String
Dim strDigitAux As String
Dim auxNum As Integer
Dim i As Integer
Dim suma As Integer
Dim letras As String

letras = "ABCDEFGHJKLNPQRSUVWX"

valor = UCase(valor)

' Comprobamos que sean 9 caracteres
If Len(valor) <> 9 And Not IsNumeric(Mid(valor, 2, 7)) Then
VALIDAR_CIF = False
End If

strLetra = Mid(valor, 1, 1) ' letra del CIF
strNumero = Mid(valor, 2, 7) ' Codigo de Control
strDigit = Mid(valor, 9) ' CIF menos primera y ultima posiciones

If InStr(letras, strLetra) = 0 Then ' comprobamos la letra del CIF (1ª posicion)
mensaje = "la letra introducida no corresponde a un CIF"
VALIDAR_CIF = False
End If

' En siete posiciones: las posiciones pares se suman.
' Las impares se multiplican por 2 sumando los resultados.
' Se divide el digito entre 10, para hallar el digito de control.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Me esta petando justo aquí.
Me sale un alert que me dice que no son del mismo tipo.
Espero que alguien pueda ayudarme.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
For i = 1 To 7
If i Mod 2 = 0 Then
suma = suma + CInt(Mid(strNumero, i, 1))
Else
auxNum = CInt(Mid(strNumero, i, 1)) * 2
suma = suma + (auxNum 10) + (auxNum Mod 10)
End If
Next
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

suma = (10 - (suma Mod 10)) Mod 10

Select Case strLetra
' Si son N P Q R S, el digito de control es alfabético
Case "N", "P", "Q", "R", "S"
suma = suma + 64
strDigitAux = Chr(suma)
' Si es X, busca en NIF (Es Extrangero)
Case "X"
strDigitAux = Mid(CalculaNIF(strNumero), 8, 1)
' Si no es todo lo anterior el dígito de control es númerico
Case Else
strDigitAux = CStr(suma)
End Select

If strDigit = strDigitAux Then
VALIDAR_CIF = True
Else
VALIDAR_CIF = False
End If
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

RE:Problemilla

Publicado por JuanC (15 intervenciones) el 25/08/2008 22:27:30
creo que puede ser esto:
suma = suma + (auxNum 10) + (auxNum Mod 10)
debería ser
suma = suma + (auxNum * 10) + (auxNum Mod 10)

prueba depurar el código paso a paso

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar