Com a permissão dos colegas, a tempos atrás criei uma função em VB para validar Email. Abaixo deixo a mesma adaptada para o VBA:
- Código:
Public Function valEmail(ByVal cEmail As String) As Boolean
valEmail = True
Dim nUser As Variant
nUser = Split(cEmail, "@")
If UBound(nUser) < 1 Or UBound(nUser) > 1 Or Len(nUser(0)) < 1 Then
valEmail = False
Else
Dim nServer As Variant
nServer = Split(nUser(1), ".")
If UBound(nServer) < 1 Or Len(nServer(LBound(nServer))) < 1 Or Len(nServer(UBound(nServer))) < 1 Then
valEmail = False
End If
End If
End Function
Primeiramente usamos o Split para verificar a quantidade de arrobas(@). Se for diferente de 1 ou se a primeira parte o arroba tiver menos de 1 caractere, retorna Falso. Caso contrário, utilizaremos o Split para dividir a segunda parte, depois do arroba, tendo o ponto como referência. Aqui aplicaremos novamente a contagem de arrays e a contagem de caracteres em cada array. Se não tiver pelo menos duas arrays ou se a quantidade de caracteres da primeira e da última array for menor que um, retorna falso. Caso contrário, retorna verdadeiro.
Agora, no clique do botão, algo assim:
- Código:
If valEmail(txtEmail) = False Then
MsgBox "Email inválido"
Else
Prossegue...
End If
No evento "Ao apertar tecla" pode-se ainda filtrar as teclas para aceitar apenas letras, números, o arroba, o ponto, hífen e underline:
- Código:
If KeyCode = 8 Or KeyCode = 13 Or KeyCode = 35 Or KeyCode = 36 Or KeyCode = 45 Or KeyCode = 46 Or KeyCode = 64 Or KeyCode = 95 Or KeyCode = 189 Or KeyCode = 190 Or (KeyCode > 47 And KeyCode < 58) Or (KeyCode > 64 And KeyCode < 91) Or (KeyCode > 95 And KeyCode < 106) Then
Else
KeyCode = 0
End If