PROBLEMA COM CNPJ

GUSTAVOBTOME 15/04/2013 11:39:26
#421950
Bom dia a todos. Estou com problemas ao tentar validar o cnpj. Ja verifiquei meu BD(access) e campo está definido como texto no tamanho 20, porem ao usar este código abaixo retorna (linha em italico) type mismach apontando para o numero 0:

Public Function gbFc_CALCULO_CNPJ(CGC As String) As Boolean

CGC = Replace(CGC, [Ô].[Ô], [Ô][Ô])
CGC = Replace(CGC, [Ô]-[Ô], [Ô][Ô])
CGC = Replace(CGC, [Ô]/[Ô], [Ô][Ô])


Dim Var1, Var2, Var3, Var4, Var5
If Len(CGC) = 8 And Val(CGC) > 0 Then
Var1 = 0: Var2 = 0: Var4 = 0
For Var3 = 1 To 7
Var1 = Val(Mid(CGC, Var3, 1))
If (Var1 Mod 2) <> 0 Then
Var1 = Var1 * 2
End If
If Var1 > 9 Then
Var2 = Var2 + Int(Var1 / 10) + (Var1 Mod 10)
Else
Var2 = Var2 + Var1
End If
Next Var3


Var4 = IIf((Var2 Mod 10) <> 0, 10 - (Var2 Mod 10), 0)[ô]aqui é o erro


If Var4 = Val(Mid(CGC, 8, 1)) Then
gbFc_CALCULO_CNPJ = True
Else
gbFc_CALCULO_CNPJ = False
End If
Else
If Len(CGC) = 14 And Val(CGC) > 0 Then
Var1 = 0: Var3 = 0: Var4 = 0: Var5 = 0: Var2 = 5
For Var3 = 1 To 12
Var1 = Var1 + (Val(Mid(CGC, Var3, 1)) * Var2)
Var2 = IIf(Var2 > 2, Var2 - 1, 9)
Next Var3
Var1 = Var1 Mod 11
Var4 = IIf(Var1 > 1, 11 - Var1, 0)
Var1 = 0: Var3 = 0: Var2 = 6
For Var3 = 1 To 13
Var1 = Var1 + (Val(Mid(CGC, Var3, 1)) * Var2)
Var2 = IIf(Var2 > 2, Var2 - 1, 9)
Next Var3
Var1 = Var1 Mod 11
Var5 = IIf(Var1 > 1, 11 - Var1, 0)
If (Var4 = Val(Mid(CGC, 13, 1)) And Var5 = Val(Mid(CGC, 14, 1))) Then
gbFc_CALCULO_CNPJ = True
Else
gbFc_CALCULO_CNPJ = False
End If
Else
gbFc_CALCULO_CNPJ = False
End If
End If
End Function


E

Public Function gbFc_CALCULO_CPF(CPF As String) As Boolean
CPF = Replace(CPF, [Ô].[Ô], [Ô][Ô])
CPF = Replace(CPF, [Ô]-[Ô], [Ô][Ô])

Dim Evar1 As Integer
Dim Evar2 As Integer
Dim F As Integer
If Len(Trim(CPF)) <> 11 Then
gbFc_CALCULO_CPF = False
Exit Function
End If
Evar1 = 0
For F = 1 To 9
Evar1 = Evar1 + Val(Mid(CPF, F, 1)) * (11 - F)
Next F
Evar2 = 11 - (Evar1 - (Int(Evar1 / 11) * 11))
If Evar2 = 10 Or Evar2 = 11 Then Evar2 = 0
If Evar2 <> Val(Mid(CPF, 10, 1)) Then
gbFc_CALCULO_CPF = False
Exit Function
End If
Evar1 = 0
For F = 1 To 10
Evar1 = Evar1 + Val(Mid(CPF, F, 1)) * (12 - F)
Next F
Evar2 = 11 - (Evar1 - (Int(Evar1 / 11) * 11))
If Evar2 = 10 Or Evar2 = 11 Then Evar2 = 0
If Evar2 <> Val(Mid(CPF, 11, 1)) Then
gbFc_CALCULO_CPF = False
Exit Function
End If
gbFc_CALCULO_CPF = True
End Function
PH1959 15/04/2013 16:39:02
#421965
Resposta escolhida
tem dois is na linha com o erro
ALVAROVB2009 16/04/2013 09:40:21
#422006
Cara é o seguinte a linha esta errada mesmo

Porque assim antes da primeira virgula o IIF tem um restrição quanto as comparações ( = e <> ) sem uma cláusula antes, então o que você pode fazer é colocar um VAL por exemplo:
Var4 = IIf( VAL(Var2 Mod 10) <> 0, 10 - (Var2 Mod 10), 0)

Ai dessa forma ele aceita a comparação <> 0

E se precisar aconselho a dar uma olhada aqui www.macoratti.net/val_cpf.htm

Más acredito que só colocando o VAL ja resolva o seu problema.

Qqer coisa posta ai
GUSTAVOBTOME 16/04/2013 10:19:50
#422010
Alvaro muito obrigado pela atenção, vou fazer a mudança e se funcionar confirmo....
GUSTAVOBTOME 16/04/2013 10:30:19
#422012
Caros colaboradores, usei a função abaixo para validar o cnpj e cpf e ficou tudo ok....agradeço pela atenção de todos.
[ô]Em um Modulo.bas

Public Formato, Numeros As String

Function ValidaCPF_CNPJ(VL_CPFCNPJ As String)
[ô] Esta Rotina Devolverá True Se o CPF/CNPJ Informado For valido
[ô] ou False Se o CPF/CNPJ Não For Correto

ValidaCPF_CNPJ = False
Dim VA_CgcCpf As String
Dim VA_Digito As String
Static Numero(15) As Integer
Dim VA_Resto As Integer
Dim VA_Resultado As Integer
Dim VA_SomaDigito10 As Integer
Dim VA_resto1 As Integer

VA_CgcCpf = Format(SóNumeros(VL_CPFCNPJ), [Ô]@@@@@@@@@@@@@@[Ô])
VA_Digito = Mid(VA_CgcCpf, 13, 2)
[ô]frmCritica_CPCCGC.LblVerificador.Caption = VA_Digito

Numero(1) = Val(Mid(VA_CgcCpf, 1, 1))
Numero(2) = Val(Mid(VA_CgcCpf, 2, 1))
Numero(3) = Val(Mid(VA_CgcCpf, 3, 1))
Numero(4) = Val(Mid(VA_CgcCpf, 4, 1))
Numero(5) = Val(Mid(VA_CgcCpf, 5, 1))
Numero(6) = Val(Mid(VA_CgcCpf, 6, 1))
Numero(7) = Val(Mid(VA_CgcCpf, 7, 1))
Numero(8) = Val(Mid(VA_CgcCpf, 8, 1))
Numero(9) = Val(Mid(VA_CgcCpf, 9, 1))
Numero(10) = Val(Mid(VA_CgcCpf, 10, 1))
Numero(11) = Val(Mid(VA_CgcCpf, 11, 1))
Numero(12) = Val(Mid(VA_CgcCpf, 12, 1))
Numero(13) = Val(Mid(VA_CgcCpf, 13, 1))
Numero(14) = Val(Mid(VA_CgcCpf, 14, 1))

If Len(Trim(VA_CgcCpf)) > 11 Then [ô] Cgc
Formato = Format(Numeros, [Ô]@@.@@@.@@@/@@@@-@@[Ô])


VA_Resultado = (Numero(1) * 5) + (Numero(2) * 4) _
+ (Numero(3) * 3) + (Numero(4) * 2) _
+ (Numero(5) * 9) + (Numero(6) * 8) + _
(Numero(7) * 7) + (Numero(8) * 6) + _
(Numero(9) * 5) + (Numero(10) * 4) + _
(Numero(11) * 3) + (Numero(12) * 2)
[ô] Atribui para resto o resto da divisão
[ô] de VA_resultado dividido por 11
VA_Resto = VA_Resultado Mod 11
If VA_Resto < 2 Then
VA_resto1 = 0
Else
VA_resto1 = 11 - VA_Resto
End If
If VA_resto1 <> Numero(13) Then
Exit Function
End If
VA_Resultado = (Numero(1) * 6) + _
(Numero(2) * 5) + (Numero(3) * 4) + _
(Numero(4) * 3) + (Numero(5) * 2) + _
(Numero(6) * 9) + (Numero(7) * 8) + _
(Numero(8) * 7) + (Numero(9) * 6) + _
(Numero(10) * 5) + (Numero(11) * 4) + _
(Numero(12) * 3) + (Numero(13) * 2)
[ô] Atribui para resto o resto da divisão
[ô] de VA_resultado dividido por 11
VA_Resto = VA_Resultado Mod 11
If VA_Resto < 2 Then
VA_resto1 = 0
Else
VA_resto1 = 11 - VA_Resto
End If
If VA_resto1 <> Numero(14) Then
Exit Function
End If
Else [ô] Cpf
Formato = Format(Numeros, [Ô]@@@.@@@.@@@ - @@[Ô])
VA_Resultado = (Numero(4) * 1) + (Numero(5) * 2) _
+ (Numero(6) * 3) + (Numero(7) * 4) _
+ (Numero(8) * 5) + (Numero(9) * 6) _
+ (Numero(10) * 7) + (Numero(11) * 8) + (Numero(12) * 9)
VA_Resto = VA_Resultado Mod 11

If VA_Resto > 9 Then
VA_resto1 = VA_Resto - 10
Else
VA_resto1 = VA_Resto
End If
[ô]frmCritica_CPCCGC.LblC1.Caption = VA_resto1
If VA_resto1 <> Numero(13) Then
GoTo Sairr
End If

VA_Resultado = (Numero(5) * 1) _
+ (Numero(6) * 2) + (Numero(7) * 3) _
+ (Numero(8) * 4) + (Numero(9) * 5) + _
(Numero(10) * 6) + (Numero(11) * 7) + _
(Numero(12) * 8) + (VA_resto1 * 9)
VA_Resto = VA_Resultado Mod 11
If VA_Resto > 9 Then
VA_resto1 = VA_Resto - 10
Else
VA_resto1 = VA_Resto
End If
[ô]frmCritica_CPCCGC.LblC2.Caption = VA_resto1
If VA_resto1 <> Numero(14) Then
Exit Function
End If

End If

ValidaCPF_CNPJ = True
Exit Function
Sairr:
VA_Resultado = (Numero(5) * 1) _
+ (Numero(6) * 2) + (Numero(7) * 3) _
+ (Numero(8) * 4) + (Numero(9) * 5) + _
(Numero(10) * 6) + (Numero(11) * 7) + _
(Numero(12) * 8) + (VA_resto1 * 9)
VA_Resto = VA_Resultado Mod 11
If VA_Resto > 9 Then
VA_resto1 = VA_Resto - 10
Else
VA_resto1 = VA_Resto
End If
[ô]frmCritica_CPCCGC.LblC2.Caption = VA_resto1
If VA_resto1 <> Numero(14) Then
Exit Function
End If

End Function
Function SóNumeros(x As String) As String
On Error Resume Next
Dim temp As String
Dim j As Integer
temp = [Ô][Ô]
For j = 1 To Len(x)
If Mid(x, j, 1) = [Ô]0[Ô] Or _
Mid(x, j, 1) = [Ô]1[Ô] Or _
Mid(x, j, 1) = [Ô]2[Ô] Or _
Mid(x, j, 1) = [Ô]3[Ô] Or _
Mid(x, j, 1) = [Ô]4[Ô] Or _
Mid(x, j, 1) = [Ô]5[Ô] Or _
Mid(x, j, 1) = [Ô]6[Ô] Or _
Mid(x, j, 1) = [Ô]7[Ô] Or _
Mid(x, j, 1) = [Ô]8[Ô] Or _
Mid(x, j, 1) = [Ô]9[Ô] Then

temp = temp + Mid(x, j, 1)
End If
Next
Numeros = temp
SóNumeros = temp
End Function

e no form usei assim:


Private Sub Text1_LostFocus()
If ValidaCPF_CNPJ(Text1.Text) = False Then
MsgBox [Ô]CPF ou CNPJ Informado não é valido[Ô], 64
Text1.SetFocus
Exit Sub
Else
Text1.Text = Formato
End If

End Sub
Tópico encerrado , respostas não são mais permitidas