• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Mail adressen verifiëren op juistheid

Status
Niet open voor verdere reacties.

JOSO053

Gebruiker
Lid geworden
3 jul 2020
Berichten
34
Hallo,

we hebben een bestand in excel waar we met meerdere personen toegang tot hebben.
Het betreft o.a. een tabblad met contactgegevens op 1 lijn in verschillende kolommen. (naam, adres, huisnummer, telefoon, mailadres,...)
In 1 cel in één van de kolommen moeten we dus de mail adres(sen) inzetten (en/of wijzigen).
Regelmatig genereert dit fouten:
- een "." dat vergeten wordt tussen naam en voornaam,
- @ XXX.com (met spatie teveel tussen @_XXX),
- ";;" wanneer meerdere mailadressen,....
-.........
Kortom klassieke fouten die bij het typen kunnen gebeuren.
Probleem: wanneer de mails verzonden worden op basis van die mail adressen, gebeurt niet bij ons maar bij een collega, dus de foutmeldingen krijgen we niet (en we weten dus ook niet wanneer er een fout in de cel is geslopen bij het intypen).

Onze vraag: is er een methode om de juistheid van de mailadressen te verifiëren bij het ingeven in de cel, waarbij een foutmelding gegeven wordt wanneer ze niet correct zijn?

Alvast bedankt voor mogelijke suggesties.
 
Hoe kom je aan deze gegevens?
via telefoon, formulier, digitaal?
 
Moet er altijd een punt staan in het deel voor "@". Dit werkt voor kolom A (waar je adressen staan) en je mag het dus ook schrijven zonder punt. Dit plaats je achter je betreffende sheetmodule

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim it
  If Target.Column > 1 Then Exit Sub
  With CreateObject("vbscript.regexp")
   .Pattern = "([a-z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})"
   For Each it In Split(Target, ";")
     If Len(it) And Not .test(it) Then
       Application.EnableEvents = False
       MsgBox "Foutieve email wordt verwijderd", vbOKOnly, "Let op"
       Target = Replace(Replace(Target, it, ""), ";;", ";")
       Application.EnableEvents = True
     End If
   Next
 End With
End Sub
 
Hoe kom je aan deze gegevens?
via telefoon, formulier, digitaal?
De gegevens komen binnen op basis van nieuwe klanten en meestal telefonisch of in .PDF. Het mail adres is regelmatig een naam en voornaam waar wij de "@xxx.nl" achterhangen of soms zijn het mail adressen die we integraal kopiëren (crtl+C en ctrl+V)....Kortom een allegaartje (dat is de moeilijkheid) en ze wisselen regelmatig (als vb.een contactpersoon wijzigt).
 
Een email adres kan je simpel controleren middels deze Boolean functie:
Code:
Public Function ValidateEmailAddress(ByVal EmailAddress As String) As Boolean
    Dim objRegExp As New RegExp
   
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"
   
    ValidateEmailAddress = objRegExp.Test(EmailAddress)
End Function
 
Laatst bewerkt:
deze gebruik ik regelmatig om mailinglijsten op te schonen.

Nu in een hulpkolom gezet, maar je zou ook voorwaardelijke opmaak kunnen gebruiken en de foute mailadressen een kleur kunnen geven.

Code:
=ALS(EN(ISFOUT(VIND.SPEC(" ";A2));ISGETAL(VIND.SPEC("@";A2));ISGETAL(VIND.SPEC(".";RECHTS(A2;LENGTE(A2)-VIND.SPEC("@";A2)))));"";"fout")
 

Bijlagen

@edmoor: Ik krijg een foutmelding bij het runnen van het script. 1738336184393.png


En kan iemand mij vertellen waarom deze #N/B als uitkomst heeft?
Code:
=REGEXEXTRAHEREN(A3;"^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$")
Hiermee zou je ook moeten kunnen controleren of er een geldig e-mail adres in de cel staat.

Ik heb een lijst met fictieve e-mail adressen (incl. fouten) gemaakt om e.e.a. te kunnen testen.
 

Bijlagen

@AlexCEL, probeer het eens zo. De code van edmoor is gebasseerd op early binding (dan heb je een referentie naar de library nodig). Late binding zoals hieronder moet wel werken.

Code:
Public Function ValidateEmailAddress(ByVal EmailAddress As String) As Boolean
    Dim objRegExp as Object
    Set objRegExp = Createobject("vbscript.regexp")
  
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"
  
    ValidateEmailAddress = objRegExp.Test(EmailAddress)
End Function
 
@JEC. /@edmoor: beide suggesties geven resultaat.

Maar check mijn voorbeeldje dan eens. Bij elk e-mail adres daarin krijg ik ONWAAR als uitkomst, oftewel geen geldig adres.
 
Hij geeft bij zowel de formule en de UDF een fout omdat de ^ vooraan en de $ achteraan het patroon ervan uitgaat dat er na het email adres niets meer staat. Laat er nou net 2 spaties aanwezig zijn achter ieder email adres ;)

Als je die ^en $ weghaalt zal het wel werken (^ = start string, $= einde string)
 
Wat dom... Ik heb die lijst gegenereerd en gekopieerd vanuit ChatGPT en nooit naar spaties gekeken. 🥴

In bijlage werkt alles nu grotendeels. Alleen de eis dat er een punt voor het @-teken moet staan wordt nog niet gedetecteerd...
 

Bijlagen

Laatst bewerkt:
Volgens openingspost is met punt de juiste...
Regelmatig genereert dit fouten:
- een "." dat vergeten wordt tussen naam en voornaam
 
Als de punt verplicht moet zijn zo, maar als je meerdere email adressen in 1 cel hebt zitten gaat dit nog niet op. Dan heb je een andere mthode nodig (bvb via de loop in post 5). Maak maar eens van cel A62 :

l.deboer@email.nl;;psteenkamp@email.com


Code:
objRegExp.Pattern = "([a-z0-9_\-]+)(\.)([a-z0-9]+)(@[a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,3})"
 
Laatst bewerkt:
Deze checkt de gehele string. Als er één verkeerde tussen zit is hij niet geldig.

Code:
"^([a-z0-9_\-]+\.[a-z0-9]+@[a-z0-9-]+(\.[a-z0-9-]+)*\.[a-z]{2,3}[ ,;]*)+$"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan