Ir para conteúdo
Fórum Script Brasil
  • 0

Validação de CNPJ


Erika Tímpano

Pergunta

Pessoal,

coloquei o código abaixo num módulo para validar o CNPJ digitado num textbox:

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
Depois, no evento beforeupdate do textbox:
Private Sub CNPJ_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim DIG, NVAR
If IsNumeric(Sheets("Simulador").Range("H12")) Then 'se não preencher o campo ignora
DIG = Right(Format(Sheets("Simulador").Range("H12"), "00000000000000"), 2)
NVAR = Módulo3.DVCNPJ(Format(Sheets("Simulador").Range("H12"), "00000000000000"))
If DIG = NVAR Then
Else 'senão avisa em vermelho
MsgBox ("CNPJ INVÁLIDO"), vbCritical, vbOKOnly
End If
End If
End Sub

Só que quando coloco um CNPJ, dá o seguinte erro:

Erro de excução 13

Tipo incorreto

Na linha

intMais = intNumero * i

do módulo.

Alguém pode me ajudar?? :wacko:

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

erika, antes de executar o programa, aperta F9 nessa linha ai (ela vai ficar vermelha) e ai rode normalmente e tenta validar esse CNPJ.

quando chegar nessa linha, a execucao deve pausar.

ai se você parar o mouse em cima da variavel intNumero, ele deve mostar o valor dela.

ai poste ai qual é o valor q ele mostrou.

Link para o comentário
Compartilhar em outros sites

  • 0

erika, essa funcao ai ta muito complicada.

peguei essa daqui ó:

Public Function CheckCNPJ(ByVal sCNPJ As String) As Boolean
'Objetivo: esta function valida o CNPJ
'Parametro: sCnpj número do sCnpj
'Retorno: True se for válido - False se não for válido

   Dim VAR1, VAR2, VAR3, VAR4, VAR5
        
   If Len(sCNPJ) = 8 And Val(sCNPJ) > 0 Then
      VAR1 = 0
      VAR2 = 0
      VAR4 = 0
      For VAR3 = 1 To 7
         VAR1 = Val(Mid(sCNPJ, 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)
      If VAR4 = Val(Mid(sCNPJ, 8, 1)) Then
         CheckCNPJ = True
      Else
         CheckCNPJ = False
      End If
   Else
      If Len(sCNPJ) = 14 And Val(sCNPJ) > 0 Then
         VAR1 = 0
         VAR3 = 0
         VAR4 = 0
         VAR5 = 0
         VAR2 = 5
         For VAR3 = 1 To 12
            VAR1 = VAR1 + (Val(Mid(sCNPJ, 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(sCNPJ, 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(sCNPJ, 13, 1)) And VAR5 = Val(Mid(sCNPJ, 14, 1))) Then
            CheckCNPJ = True
         Else
            CheckCNPJ = False
         End If
      Else
         CheckCNPJ = False
      End If
   End If
End Function[/code] e ta funcionando certinho aqui, é so passar o cnpj sem ponto, barras, etc. exemplo:
[code]Private Sub CNPJ_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If CheckCNPJ(CNPJ.Text) Then
    'valido
Else
    'invalido
End If
End Sub

fonte: http://desenvolvedores.net/modules.php?nam...icle&sid=49

Link para o comentário
Compartilhar em outros sites

  • 0

Public Function validateCNPJ(cnpj As String) As Boolean

    Dim digits(13) As Variant

    Dim stCalc As Variant: stCalc = Array(6, 7, 8, 9, 2, 3, 4, 5, 6, 7, 8, 9)
    Dim ndCalc As Variant: ndCalc = Array(5, 6, 7, 8, 9, 2, 3, 4, 5, 6, 7, 8, 9)

    Dim stRes As Long
    Dim ndRes As Long

    If Len(cnpj) < 14 Then

        cnpj = String(14 - Len(cnpj), "0") & cnpj

    End If

    For i = LBound(digits) To UBound(digits)

        digits(i) = Mid(cnpj, i + 1, 1)

    Next

    For i = LBound(stCalc) To UBound(stCalc)

        stRes = stRes + (digits(i) * stCalc(i))
        ndRes = ndRes + (digits(i) * ndCalc(i))

    Next

    stRes = stRes Mod 11

    If stRes = 10 Then stRes = 0

    ndRes = ndRes + (stRes * ndCalc(LBound(ndCalc)))

    ndRes = ndRes Mod 11

    If ndRes = 10 Then ndRes = 0

    If digits(12) = stRes And digits(13) = ndRes Then validateCNPJ = True Else validateCNPJ = False

End Function
 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...