vba – Validar CPF e CNPJ na mesma textbox


Eu estou tentando fazer com que a minha Textbox receba um valor digitado e o valide, caso seja um CPF ou CNPJ existente/real.

Eu consegui fazer funcionar quando usava duas Textbox, uma pra cada caso (CPF ou CNPJ).

A minha Textbox está funcionando mas apenas quando digito um CPF, se eu insiro um CNPJ – seja ele real ou não – ela me dá erro como se eu tivesse digitado um CPF inválido.

O erro que ele dá não é do VBA em si, mas sim o erro que eu escrevi pra me avisar caso um CPF inválido tenha sido inserido.

Esta é a função que trata dos dados inseridos pelo usuário:

Private Sub TextCNPJ_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    Dim Digitado As String

    Digitado = TextCNPJ.Text
    Digitado = Replace(Digitado, ".", "")
    Digitado = Replace(Digitado, "-", "")
    
    'verifica se o CPF está correto
    If Len(TextCNPJ) = 11 And VerificarCPF(Digitado) = "OK" Then
    
        TextCNPJ = Format$(TextCNPJ, "!@@@.@@@.@@@-@@")
        
    'verifica se o CNPJ está correto
    ElseIf Len(TextCNPJ) = 14 And VerificarCNPJ(Digitado) = "OK" Then
    
'        Digitado = TextCNPJ.Value
        TextCNPJ = Format$(TextCNPJ, "!@@.@@@.@@@/@@@@-@@")
        
    'checa se o campo estiver vazio ou o cpf digitado não for existente
    ElseIf Val(Digitado) = 0 Or IsNull(TextCNPJ) Or VerificarCPF(Digitado) <> "OK" Then
        
        MsgBox "CPF invalido", vbCritical, "CPF INVALIDO"
        TextCNPJ = ""
        Exit Sub
    
    'Val(Digitado) = 0 Or
    ElseIf Val(Digitado) = 0 Or IsNull(TextCNPJ) Or VerificarCNPJ(Digitado) <> "CNPJ Válido" Then
        
        MsgBox "CNPJ Inválido", vbCritical, "ERRO"
        TextCNPJ = ""
            
    End If


End Sub

E estas duas aqui validam o CPF e CNPJ pra mim:

Public Function VerificarCPF(sCPF As String) As String

   If Len(sCPF) < 11 Then sCPF = String(11 - Len(sCPF), "0") & sCPF
   For caracter = 1 To 9
        DV1 = Val(Mid(sCPF, caracter, 1)) * caracter + DV1
        If caracter > 1 Then DV2 = Val(Mid(sCPF, caracter, 1)) * (caracter - 1) + DV2
   Next
   DV1 = Right(DV1 Mod 11, 1)
   DV2 = Right((DV2 + (DV1 * 9)) Mod 11, 1)
   If Mid(sCPF, 10, 1) = DV1 And Mid(sCPF, 11, 1) = DV2 Then VerificarCPF = "OK"

   
End Function


Public Function VerificarCNPJ(sCNPJ As String) As String

    Dim d1 As Integer
    Dim d2 As Integer
    Dim d3 As Integer
    Dim d4 As Integer
    Dim d5 As Integer
    Dim d6 As Integer
    Dim d7 As Integer
    Dim d8 As Integer
    Dim d9 As Integer
    Dim d10 As Integer
    Dim d11 As Integer
    Dim d12 As Integer
    Dim d13 As Integer
    Dim d14 As Integer
    Dim DV1 As Integer
    Dim DV2 As Integer
    Dim UltDig As Integer
    'Completa com zeros à esquerda caso não esteja com os 14 digitos
    If Len(sCNPJ) < 14 Then
        sCNPJ = String(14 - Len(sCNPJ), "0") & sCNPJ
    End If
    'Pega a posição do último dígito
    UltDig = Len(sCNPJ)
    'Sai da função caso a célula esteja vazia
    If sCNPJ = "00000000000000" Then
        VerificarCNPJ = ""
        Exit Function
    End If
    'Pega cada dígito do CNPJ informado e
    'coloca nas variáveis específicas
    d1 = CInt(Mid(sCNPJ, UltDig - 13, 1))
    d2 = CInt(Mid(sCNPJ, UltDig - 12, 1))
    d3 = CInt(Mid(sCNPJ, UltDig - 11, 1))
    d4 = CInt(Mid(sCNPJ, UltDig - 10, 1))
    d5 = CInt(Mid(sCNPJ, UltDig - 9, 1))
    d6 = CInt(Mid(sCNPJ, UltDig - 8, 1))
    d7 = CInt(Mid(sCNPJ, UltDig - 7, 1))
    d8 = CInt(Mid(sCNPJ, UltDig - 6, 1))
    d9 = CInt(Mid(sCNPJ, UltDig - 5, 1))
    d10 = CInt(Mid(sCNPJ, UltDig - 4, 1))
    d11 = CInt(Mid(sCNPJ, UltDig - 3, 1))
    d12 = CInt(Mid(sCNPJ, UltDig - 2, 1))
    d13 = CInt(Mid(sCNPJ, UltDig - 1, 1))
    d14 = CInt(Mid(sCNPJ, UltDig, 1))
    
    DV1 = (d1 * 6) + (d2 * 7) + (d3 * 8) + (d4 * 9) + (d5 * 2) + (d6 * 3) + (d7 * 4) + (d8 * 5) + (d9 * 6) + (d10 * 7) + (d11 * 8) + (d12 * 9)
    DV1 = DV1 Mod 11    '
    
    If DV1 = 10 Then
        DV1 = 0
    End If
    DV2 = (d1 * 5) + (d2 * 6) + (d3 * 7) + (d4 * 8) + (d5 * 9) + (d6 * 2) + (d7 * 3) + (d8 * 4) + (d9 * 5) + (d10 * 6) + (d11 * 7) + (d12 * 8) + (DV1 * 9)
    DV2 = DV2 Mod 11    'Obtem o resto
    'se o resto for igual a 10 altera pra 0
    If DV2 = 10 Then
        DV2 = 0
    End If
    'Fazendo a comparação dos dvs informados
    If d13 = DV1 And d14 = DV2 Then
        VerificarCNPJ = "CNPJ Válido"
    Else
        VerificarCNPJ = "CNPJ Inválido"
    End If
    
End Function

Alguém pode me ajudar?

Se estiver confuso por favor me faça perguntas sobre o código!