Página 1 de 1

Validação de CPF TextBox: erro 13 "Tipos incompatíveis" [RESOLVIDO]

Enviado: Qui Ago 11, 2016 4:15 pm
por costaribeiro
:D Olá pessoal!

Elaborei um formulário no Word para facilitar meu trabalho. Nele, tem um TextBox para inserção de CPF que, ao sair, verifica sua validade. Entretanto, ocorre o Erro em tempo de execução '13': Tipos incompatíveis e destaca a rotina intMais = intNumero * i na macro de validação.

Alguém pode ajudar a contornar, ou resolver, esse problema?

Validação do CPF:

Código: Selecionar todos

Option Explicit



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
If DVCPF = strDigVer Then
'MsgBox "CPF válido!", vbInformation
Else
MsgBox "CPF inválido", vbCritical
'DoCmd.CancelEvent
End If

End Function

Chamada da macro no formulário:

Código: Selecionar todos

Private Sub txt_CPF_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Call DVCPF(Me.txt_CPF)
End Sub
Desde já, agradecido.

Re: Validação de CPF TextBox: erro 13 "Tipos incompatíveis"

Enviado: Qui Ago 11, 2016 7:56 pm
por Mikel Silveira Fraga
Fala meu amigo Costa Ribeiro, como tem passado!?

Cara, outro dia, postei um modelo baseado em Criação de Classes no VBA, que realiza validação de CPF, CNPj, Chave de Acesso de DFe e Título de Eleitor. Chegou a dar uma olhada?

Bem, o interessante de se trabalhar com Classe, que a mesma pode ser adaptado a um modelo do Word, PowerPoint, Access e qualquer outra aplicação Office/VBA, desde que a mesma não esteja fazendo nenhuma referência as bibliotecas específicas de cada aplicação.

Caso tenha interesse, vou deixar aqui o link para dar uma olhada.
- [MODELO] Objeto Módulo Classe - Validação Documentos Brasileiros

Abraços e excelente noite.

Re: Validação de CPF TextBox: erro 13 "Tipos incompatíveis"

Enviado: Sex Ago 12, 2016 10:21 am
por costaribeiro
Caro Mikel,

Achei muito interessante e prático.

Mas, se não for inoportuno, como eu chamo a validação para CPF somente, no TextBox "txt_CPF"? Sem a necessidade de botão.

Obrigado.

Re: Validação de CPF TextBox: erro 13 "Tipos incompatíveis"

Enviado: Sex Ago 12, 2016 12:27 pm
por Mikel Silveira Fraga
Costa Ribeiro, bom dia.

O que você poderia fazer é utilizar um dos dois eventos do TextBox: Change ou AfterUpdate. O interessante seria criar uma rotina para validação. Considerando que o CPF seja informado sem a formatação, poderia ser feito da seguinte forma:
- Evento do TextBox

Código: Selecionar todos

Private Sub txt_CPF_Change()
  If VBA.Len(txt_CPF.Value) = 11 then Call ValidaCPF(txt_CPF.Value)
End Sub
ou
Private Sub txt_CPF_AfterUpdate()
  If VBA.Len(txt_CPF.Value) = 11 then Call ValidaCPF(txt_CPF.Value)
End Sub
No caso, o procedimento ValidaCPF, poderia ser feito da seguinte forma:

Código: Selecionar todos

Private Sub ValidaCPF(ByVal sDoc as String)
  Dim vdDoc As ValidateDocument
  vdDoc.CheckDocument "vdCPF", sDoc
  If vdDoc.Validate = True Then
    MsgBox "Dígito Verificador possui erros. Favor verificar.", vbCritical, "Erro na verificação"
  End If  
End Sub
Caso essa rotina seja colocada em um Módulo, altere de Private para Public.

Dúvidas, a disposição.

Re: Validação de CPF TextBox: erro 13 "Tipos incompatíveis"

Enviado: Sex Ago 12, 2016 4:37 pm
por costaribeiro
Caro Mikel,

Ajudou bastante. Adaptei ao formulário e facilitou.

Obrigado. :P