Amigo
Tente adaptar esses código, ele verifica CPF válido e ao mesmo tempo verifica se o mesmo encontra-se já cadastrado no seu banco.
Private Sub Função_Aten_Exit(Cancel As Integer)
Private Sub CPF_Cad_BeforeUpdate(Cancel As Integer)
'Verifica se o CPF já se encontra cadastrado.
If DCount("CPF_Cad", "Tab_Principal", "CampodoCPF='" & Me!CPF_Cad & "'") >= 1 Then
MsgBox "CPF já cadastrado no sistema.", vbInformation, "ATENÇÃO!"
Cancel = True
Exit Sub
End If
'Validação de CPF
' MSDevelop - Daniel Santos - 29-02-2012
If IsNull(CampodoCPF.Text) Then
MsgBox "CPF Inválido!", vbCritical
Cancel = True ' caused the changes to not be saved
Exit Sub
End If
If CampodoCPF = "___.___.___-__" Then
MsgBox "CPF Inválido!", vbCritical
Cancel = True ' caused the changes to not be saved
Exit Sub
End If
If isCPF(CampodoCPF.Text) = False Then
MsgBox "CPF Inválido!", vbCritical
Cancel = True ' caused the changes to not be saved
Exit Sub
End If
End Sub
' MSDevelop - Daniel Santos - 29-02-2012
Public Function isCPF(ByVal pCPF As String) As Boolean
Dim Conta As Integer, Soma As Integer, Resto As Integer, Passo As Integer, i As Integer, lsCPF As String, lsCPFcontrario As String
isCPF = False: pCPF = Trim(pCPF)
lsCPF = Mid$(pCPF, 1, 3) & Mid$(pCPF, 5, 3) & Mid$(pCPF, 9, 3) & Mid$(pCPF, 13, 2)
'verifica se CPF ao contrario é igual ao normal (=todos os digitos repetidos)
lsCPFcontrario = ""
For i = Len(lsCPF) To 1 Step -1
lsCPFcontrario = lsCPFcontrario + Mid$(lsCPF, i, 1)
Next
If lsCPF = lsCPFcontrario Then
'CPF com todos os digitos repetidos é considerado inválido
'segundo o ATO DECLARATÓRIO EXECUTIVO Nº 1, DE 23 DE MAIO DE 2002
'da Receita Federal
Exit Function
End If
If Len(lsCPF) <> 11 Then
Exit Function
End If
For Passo = 11 To 12
Soma = 0
For Conta = 1 To Passo - 2
Soma = Soma + Val(Mid(lsCPF, Conta, 1)) * (Passo - Conta)
Next
Resto = 11 - (Soma - (Int(Soma / 11) * 11))
If Resto = 10 Or Resto = 11 Then Resto = 0
If Resto <> Val(Mid(lsCPF, Passo - 1, 1)) Then
Exit Function
End If
Next
isCPF = True
End Function