MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido] Como valido cpf e cnpj em vba no access?

    Compartilhe
    avatar
    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11235
    Registrado : 30/12/2009

    Como valido cpf e cnpj em vba no access?

    Mensagem  criquio em Qui 31 Dez 2009, 00:32

    Olá, tudo na paz? Espero que sim.
    Pessoal, é o seguinte, estou precisando de uma rotina em vba e acho que aqui eu vou conseguir.
    Eu estou desenvolvendo uma aplicação no Access e preciso validar cpf e cnpj no envento AfterUpdade de seus respectivos textbox de mode que se o número estiver errado, apareça uma mensagem dizendo isso e se estiver correto, passe para o próximo campo. Tenho visto algumas rotinas para colocar em módulo global, mas não consegui fazê-lo, por isso queria uma rotina para inserir no evento AfterUpdate das caixinhas de texto.
    Se puderem me ajudar, ficaria muito agradecido.
    Podem enviar para meu email se quiserem.
    Um abração.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6505
    Registrado : 05/11/2009

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  Alexandre Neves em Qui 31 Dez 2009, 11:07

    Bom dia,

    Nunca precisei de validar estes códigos mas seguem funções encontradas. Não se esqueça de indicar o autor.

    '******************************************
    'Rotinas para cálculo de dígito verificador
    'e validação de CNPJ e CPF
    'Autor: Luiz Cláudio C. V. Rocha
    '******************************************

    Public Function fDigCNPJ(CNPJ As String) As String
    'Calcula os dígitos verificadores do CNPJ
    Dim I As Integer
    Dim intFator As Integer
    Dim intTotal As Integer
    Dim intResto

    'Verifica se tem 12 ou 14 dígitos
    If Not (Len(CNPJ) = 12 Or Len(CNPJ) = 14) Then
    Exit Function
    Else
    'Verifica se é numérico
    If Not IsNumeric(CNPJ) Then
    Exit Function
    Else
    'Trunca o CNPJ em 12 caracteres
    CNPJ = Left$(CNPJ, 12)
    End If
    End If

    Inicio:
    'Percorre as colunas (de trás para frente),
    'multiplicando por seus respectivos fatores
    intFator = 2
    intTotal = 0
    For I = Len(CNPJ) To 1 Step -1
    If intFator > 9 Then intFator = 2
    intTotal = intTotal + ((CInt(Mid(CNPJ, I, 1)) * intFator))
    intFator = intFator + 1
    Next I

    'Obtém o resto da divisão por 11
    I = intTotal Mod 11
    'Subtrai 11 do resto
    I = 11 - I
    'O dígito verificador é i
    If I = 10 Or I = 11 Then I = 0
    'Concatena ao CNPJ
    CNPJ = CNPJ & CStr(I)

    If Len(CNPJ) = 13 Then
    'Calcula o segundo dígito
    GoTo Inicio
    End If

    'Retorna os dígitos verificadores
    fDigCNPJ = Right$(CNPJ, 2)
    End Function

    Public Function fDigCPF(CPF As String) As String
    'Calcula os dígitos verificadores do CPF
    Dim I As Integer
    Dim intFator As Integer
    Dim intTotal As Integer
    Dim intResto

    'Verifica se tem 9 ou 11 dígitos
    If Not (Len(CPF) = 9 Or Len(CPF) = 11) Then
    Exit Function
    Else
    'Verifica se é numérico
    If Not IsNumeric(CPF) Then
    Exit Function
    Else
    'Trunca o CPF em 9 caracteres
    CPF = Left$(CPF, 9)
    End If
    End If

    Inicio:
    'Percorre as colunas (de trás para frente),
    'multiplicando por seus respectivos fatores
    intFator = 2
    intTotal = 0
    For I = Len(CPF) To 1 Step -1
    intTotal = intTotal + ((CInt(Mid(CPF, I, 1)) * intFator))
    intFator = intFator + 1
    Next I

    'Obtém o resto da divisão por 11
    I = intTotal Mod 11
    'Subtrai 11 do resto
    I = 11 - I
    'O dígito verificador é i
    If I = 10 Or I = 11 Then I = 0
    'Concatena ao CPF
    CPF = CPF & CStr(I)

    If Len(CPF) = 10 Then
    'Calcula o segundo dígito
    GoTo Inicio
    End If

    'Retorna os dígitos verificadores
    fDigCPF = Right$(CPF, 2)
    End Function

    Public Function fCNPJ(CNPJ As String) As Boolean
    'Verifica se o CNPJ é válido
    Dim strChar As String

    'Verifica se tem 14 caracteres
    If Not Len(CNPJ) = 14 Then
    fCNPJ = False
    Exit Function
    End If

    'Verifica se o dígito verificador confere
    strChar = Mid$(CNPJ, 13, 2)
    If fDigCNPJ(CNPJ) = strChar Then
    fCNPJ = True
    Else
    fCNPJ = False
    End If
    End Function

    Public Function fCPF(CPF As String) As Boolean
    'Verifica se o CPF é válido
    Dim strChar As String

    'Verifica se tem 11 caracteres
    If Not Len(CPF) = 11 Then
    fCPF = False
    Exit Function
    End If

    'Verifica se o dígito verificador confere
    strChar = Mid$(CPF, 10, 2)
    If fDigCPF(CPF) = strChar Then
    fCPF = True
    Else
    fCPF = False
    End If
    End Function
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9703
    Registrado : 04/11/2009

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  JPaulo em Qui 31 Dez 2009, 11:09

    Ola Bom Dia e seja bem vindo ao fórum;

    Com a função do Grande Luiz Cláudio C. V. Rocha, fiz um pequeno exemplo para o ajudar.

    Arrow  [Você precisa estar registrado e conectado para ver este link.]

    Veja se serve e retorne.
    Feliz Ano 2010


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9703
    Registrado : 04/11/2009

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  JPaulo em Qui 31 Dez 2009, 11:10

    Grande Alexandre enquanto preparava o exemplo você respondeu, desculpe que não vi e Feliz Ano 2010.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    avatar
    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11235
    Registrado : 30/12/2009

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  criquio em Sab 30 Jan 2010, 02:44

    Obrigado pelas respostas e desculpem ter demorado a retornar. Acho que isso resolve a questão. Tem uma coisas que não preciso mas creio que consigo arrumar aqui, como por exemplo: não preciso da mensagem de que é válido, só quando for inválido. Sendo válido, pode passar direto para o próximo campo. Tambem não preciso, para esse projeto, das imagens de positivo e negativo. No caso de CNPJ:

    Else
    MsgBox "CNPJ válido."
    Me.txtcnpj.InputMask = "00\.000\.000\/0000\-00"
    Me.img1.Visible = True
    Me.img2.Visible = False
    End If


    Creio que basta retirar as linhas:

    MsgBox "CNPJ válido."
    Me.img1.Visible = True
    Me.img2.Visible = False


    Deixando o código assim:

    Else
    Me.txtcnpj.InputMask = "00\.000\.000\/0000\-00"
    End If


    Estou certo no meu raciocínio?

    Outra questão, vamos ver se tem uma solução melhor.
    Eu tenho um relatório com cinco subrelatórios. Só que pode ser que tenha dados só em um deles. Da maneira normal, nesse caso, se o terceiro relatório contiver dados e os outros não, ficam os espaços dos relatórios sem dados, vazios no relatório principal, no modo de impressão. Eu percebi que os subrelatórios se auto ajustam à altura necessária para mostrar todos os dados, então defini a altura dos cinco subelatórios para zero e deixei eles praticamente juntos, logo abaixo dos dados do relatório principal. Isso resolveu a questão, mostrando só os subrelarórios que contem dados e em uma ordem correta e sem espaços entre eles.
    Alguem teria uma solução melhor que essa? Ou isso está bom desse jeito? Pelo menos, resolveu o problema como eu precisava.
    Abraços e mais uma vez, obrigado.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6505
    Registrado : 05/11/2009

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  Alexandre Neves em Sab 30 Jan 2010, 09:23

    Bom dia, criquio

    Relativamente à primeira dúvida, não sei a utilidade das imagens mas se pretende que não apareçam, deve forçar a que não apareçam:
    Else
    Me.txtcnpj.InputMask = "00\.000\.000\/0000\-00"
    Me.img1.Visible = False
    Me.img2.Visible = False
    End If

    Sobre a segunda questão (não costumo trabalhar com sub-formulários nem sub-relatórios) parece-me que encontrou a melhor solução.

    Bom trabalho,
    avatar
    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11235
    Registrado : 30/12/2009

    Alexandre

    Mensagem  criquio em Dom 31 Jan 2010, 01:35

    Obrigado.
    Na verdade, as imagens são ícones de positivo quando o número é válido e negativo quando é inválido. Eu fiz do jeito que falei, retirei as linhas e excluí as imagens e funcinou direitinho. Achei melhor assim, para ficar o código mais enxuto, já que não necessitaria delas. Mas o esquema original vai ficar arquivado aqui no meu banco de scripts e de exemplos. Com certeza, ainda o utilizarei em outros projetos.
    Eu já tinha pegado alguns exemplos de como fazer essa validação, mas esse foi o que mais contribuiu para o meu entendimento sobre o seu funcionamento. Foi o único que consegui adaptar às minhas necessidades e a partir dele poderei entender melhor o funcionamento dos outros esquemas.
    Abração a todos.

    douglas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 17/10/2010

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  douglas em Dom 24 Out 2010, 23:16

    Alguém pode postar o exemplo novamente? Estou precisando e o link não funciona mais.
    Obrigado.
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9703
    Registrado : 04/11/2009

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  JPaulo em Seg 25 Out 2010, 17:43

    O Exemplo encontra-se na sala de Repositorio de Exemplos;

    [Você precisa estar registrado e conectado para ver este link.]


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    douglas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 17/10/2010

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  douglas em Seg 25 Out 2010, 19:29

    Obrigado Very Happy
    avatar
    Educav
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 20/07/2012

    CPF - dúvida

    Mensagem  Educav em Qua 21 Ago 2013, 00:18

    Boa noite camaradas de Access....

    Eu fiz umas adaptações num BD que checa o CPF....

    No evento antes de atualizar o campo CPF, coloquei o seguinte código....

    -------------------------------------------------------------------------------------

    Private Sub CPF_BeforeUpdate(Cancel As Integer)
     
    If DCount("CPF", "Pessoas", "CPF='" & Me!CPF & "'") >= 1 Then
    MsgBox "Este número de CPF já foi cadastrado !", vbInformation, "Informação"
    Cancel = True
    Exit Sub
    End If

    End Sub

    --------------------------------------------------------------------------------------------


    No evento após atualizar coloquei uma chamada =DVCPF([CPF]) que roda o módulo chamado VERCPF que tem o código abaixo, que adaptei tbm...

    --------------------------------------------------------------------------------------------

    Function DVCPF(CPF As String) As String

    'Rotina alterada por Edu Cav - 2013
    'Data: 24/06/2013
    'Site: [Você precisa estar registrado e conectado para ver este link.]

    If CPF = "11111111111" Or CPF = "22222222222" Or CPF = "33333333333" _
      Or CPF = "44444444444" Or CPF = "55555555555" Or CPF = "66666666666" _
      Or CPF = "77777777777" Or CPF = "88888888888" Or CPF = "99999999999" Or CPF = "00000000000" Then
      MsgBox "O CPF é INVÁLIDO! Digite-o novamente.", vbCritical
      Exit Function
    End If

    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
    If DVCPF <> strDigVer Then
    ' If DVCPF = strDigVer Then
    ' MsgBox "CPF correto!", vbInformation
    ' Else
    MsgBox "O CPF é INVÁLIDO! Informe-o novamente !", vbCritical
    DoCmd.CancelEvent
    End If
    End Function

    ---------------------------------------------------------------------------------

    E no evento ao sair do campo CPF, coloquei o código abaixo.....

    Private Sub CPF_Exit(Cancel As Integer)

    'Este if verifica o controle que está o foco, se estiver nulo ou em branco então
    If IsNull([CPF]) Or IsEmpty([CPF]) Then

    'Dispara uma mensagem ao usuário do computador para que ele tome uma decisão. Se ele escolher Ok, então passa a frente
    If MsgBox("É recomendado o preenchimento do CPF." & Chr(13) & _
    "Deseja não preencher agora e preenchê-lo em outro momento?", vbExclamation + vbOKCancel, " Atenção !!!") = vbOK Then Exit Sub

    'Se escolher e apertar Cancelar, então o foco direciona para caixa de texto (Texto2)
    Me.CPF.SetFocus
    Cancel = True
    End If
    End Sub

    -------------------------------------------------------------------------------------------------

    Bem, o que ainda me falta é um jeito de deixar vazio o campo CPF caso ele seja digitado errado.
    Os códigos acima apenas me dão uma noção do que está ocorrendo com o CPF, ou seja, se deixo vazio, ele acusa, mas passa ao campo seguinte. Se digito um CPF que já existe ele me avisa que já há um CPF igual.
    Mas preciso que ele seja zerado no caso de ser um CPF inválido e que eu consiga ir para o campo seguinte.

    Alguma luz aí pessoal ?

    Grato,

    Edu Cav

    Qualhada
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3
    Registrado : 22/11/2016

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  Qualhada em Sex 09 Dez 2016, 14:41

    ola, bom dia a todos
    estou começando a aprender o access vba, e gostaria que vocês me ajudasse.
    como fazer para validar o CNPJ em uma classe, só que chamando essa função valida CNPJ pelo método let da classe.
    é possível?
    avatar
    KALEF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 07/08/2017

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  KALEF em Qua 06 Set 2017, 15:57

    Link com erro
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9703
    Registrado : 04/11/2009

    Re: [Resolvido] Como valido cpf e cnpj em vba no access?

    Mensagem  JPaulo em Qua 06 Set 2017, 17:13

    Links ON.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

      Data/hora atual: Ter 21 Nov 2017, 10:15