Bom dia... comprei um livre recetemente para tentar me ajudar no trabalho: VBA e Macros: Microsoft Excel 2010. Contudo nunca fiz curso de programação e estou tendo dificuldades para entender tais códigos e num dos exemplos do livro dá um erro de compilação que nao estou conseguindo desifrar. Eis o código:
Function IsEmailValid(strEmail As String) As Boolean
Dim strArray As Variant
Dim strItem As Variant
Dim i As Long
Dim c As String
Dim blnIsItValid As Boolean
blnIsItValid = True
'Conte os @ na string.
i = Len(strEmail) - Len(Application.Substitue(strEmail, "@", ""))
'Se houver mais de um @, o e-mail é inválido.
If i <> 1 Then IsEmailValid = False: Exit Function
ReDim strArray(1 To 2)
'As duas linhas seguintes colocam os textos à esquerda e
'à direita do @ em suas próprias variáveis.
strArray(1) = Left(strEmail, InStr(1, strEmail, "@", 1) - 1)
strArray(2) = Application.Substitute(Right(strEmail, Len(strEmail) - _
Len(strArray(1))), "@", "")
For Each strItem In strArray
'Verifica se há algo na variável.
'Se não houver, então parte do e-mail está faltando.
If Len(strItem) <= 0 Then
blnIsItValid = True
IsEmailValid = blnIsItValid
Exit Function
End If
'Verifica se há apenas caracteres válidos no e-mail
For i = 1 To Len(strItem)
'Coloca as letras em minúsculos para facilitar a verificação
c = LCase(Mid(strItem, i, 1))
If InStr("abcdefghijklmnopqrstuxwyz_-.", c) <= 0 _
And Not IsNumeric Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
Next i
'Verifica se o primeiro caractere da esquerda e da direita não é ponto.
If Left(strItem, 1) = "." Or Right(strItem, 1) = "." Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
Next strItem
'Verifica se há um ponto na parte do endereço que está na direita.
If InStr(strArray(2), ".") <= 0 Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
i = Len(strArray(2)) - InStrRev(strArray(2), ".") 'Localiza o ponto
'Verifica se o número de letras corresponde a uma extensão de domínio válida.
If i <> 2 And i <> 3 And i <> 4 Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
'Verifica se não há dois pontos juntos no e-mail.
If InStr(strEmail, "..") > 0 Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
IsEmailValid = blnIsItValid
End Function
O erro é Erro de compilação: argumento não é opcional e acontece And Not IsNumeric Then (no IsNumeric). Será que alguém consegue me ajudar?