Prezados,
Fuçando na NET achei uma macro em VBA para validação de CPF e CNPJ (Info Abril). Após fazer algumas alterações, com o objetivo de juntar as pesquisas, tive êxito em partes. Não consegui identificar onde está o erro, quando entro com o CPF por exemplo 00123456789 ele aceita como válido tanto o final 89 como o 88, acredito que seja nos arredondamentos mas não consegui identificar onde.
Segue o código:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Dig, Nvar
If Target.Address = Range("B2").Address Then
If IsNumeric(Range("B2")) Then 'se não preencher o campo ignora
Dig = Right(Format(Range("B2"), "00000000000000"), 2)
Nvar = Módulo1.DVCNPJ(Format(Range("B2"), "00000000000000"))
If Dig = Nvar Then
ElseIf Target.Address = Range("B2").Address Then
If IsNumeric(Range("B2")) Then 'se não preencher o campo ignora
Dig = Right(Range("B2"), 2)
Nvar = Módulo1.DVCPF(Format(Range("B2"), "00000000000"))
If Dig = Nvar Then
Else 'senão avisa em vermelho
Range("B2") = "CPF/CNPJ INVÁLIDO"
End If
End If
End If
End If
End If
End Sub
"Modulo 1"
Function DVCNPJ(CNPJ As String) As String
Dim intSoma, intSoma1, intSoma2, intInteiro As Long
Dim intNumero, intMais, i, intResto As Integer
Dim intDig1, intDig2 As Integer
Dim strcampo, strCaracter, StrConf, strCNPJ, strDigVer As String
Dim dblDivisao As Double
intSoma = 0
intSoma1 = 0
intSoma2 = 0
intNumero = 0
intMais = 0
strDigVer = Right(CNPJ, 2)
strcampo = Left(CNPJ, 8)
strCNPJ = Right(CNPJ, 6)
strCNPJ = Left(strCNPJ, 4)
strcampo = Right(strcampo, 4) & strCNPJ
For i = 2 To 9
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma1 = intSoma1 + intMais
Next i
'Separa os 4 primeiros dígitos do CNPJ
strcampo = Left(CNPJ, 4)
For i = 2 To 5
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma2 = intSoma2 + intMais
Next i
intSoma = intSoma1 + intSoma2
dblDivisao = intSoma / 11
intInteiro = Int(dblDivisao) * 11
intResto = intSoma - intInteiro
If intResto = 0 Or intResto = 1 Then
intDig1 = 0
Else
intDig1 = 11 - intResto
End If
intSoma = 0
intSoma1 = 0
intSoma2 = 0
intNumero = 0
intMais = 0
strcampo = Left(CNPJ, 8)
strCNPJ = Right(CNPJ, 6)
strCNPJ = Left(strCNPJ, 4)
strcampo = Right(strcampo, 3) & strCNPJ & intDig1
For i = 2 To 9
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma1 = intSoma1 + intMais
Next i
strcampo = Left(CNPJ, 5)
For i = 2 To 6
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma2 = intSoma2 + intMais
Next i
intSoma = intSoma1 + intSoma2
dblDivisao = intSoma / 11
intInteiro = Int(dblDivisao) * 11
intResto = intSoma - intInteiro
If intResto = 0 Or intResto = 1 Then
intDig2 = 0
Else
intDig2 = 11 - intResto
End If
StrConf = intDig1 & intDig2
DVCNPJ = StrConf
End Function
Function DVCPF(Cpf As String) As String
Dim lngSoma, lngInteiro As Long
Dim intNumero, intMais, i, intResto As Integer
Dim intDig1, intDig2 As Integer
Dim strDigVer, strcampo, strCaracter, StrConf As String
Dim dblDivisao As Double
lngSoma = 0
intNumero = 0
intMais = 0
strcampo = Left(Cpf, 9)
strDigVer = Right(Cpf, 2)
For i = 2 To 10
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
lngSoma = lngSoma + intMais
Next i
dblDivisao = lngSoma / 11
lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
intDig1 = 0
Else
intDig1 = 11 - intResto
End If
strcampo = strcampo & intDig1
lngSoma = 0
intNumero = 0
intMais = 0
For i = 2 To 11
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
lngSoma = lngSoma + intMais
Next i
dblDivisao = lngSoma / 11
lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
intDig2 = 0
Else
intDig2 = 11 - intResto
End If
StrConf = intDig1 & intDig2
DVCPF = StrConf
End Function
Public Function PISPASEP(numero As String)
Dim ftap As String
Dim total As String
Dim i As Integer
Dim resto As Integer
If Val(numero) = 0 Or Len(numero) <> 11 Then
PISPASEP = False
Exit Function
End If
ftap = "3298765432"
total = 0
For i = 1 To 10
total = total + Val(Mid(numero, i, 1)) * Val(Mid(ftap, i, 1))
Next i
resto = Int(total Mod 11)
If resto <> 0 Then
resto = 11 - resto
End If
If resto <> Val(Mid(numero, 11, 1)) Then
PISPASEP = False
Exit Function
End If
PISPASEP = True
End Function
Validação De Cpf / Cnpj No Excel
Iniciado por BuGs, Jul 14 2010 04:17 PM
Post sem respostas
1 usuário(s) esta(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)











