E-mailadres ophalen

Status
Niet open voor verdere reacties.

solong

Gebruiker
Lid geworden
25 okt 2017
Berichten
8
Het bericht maar even terug gezet anders is het zo'n raar iets.
Goeiemiddag,

Ik ben bezig met het schrijven van een macro om automatisch selecties te mailen naar contactpersonen.
Nu was de macro zo geschreven dat hij een e-mailadres mailt dat met behulp van verticaal zoeken uit een ander tabblad wordt opgehaald. Nu wil ik ook de mogelijkheid hebben om mensen in de CC te zetten, alleen werkt de macro niet goed meer.

- Wanneer er een e-mailadres in de Kolom 'CC' is ingevuld wordt deze netjes opgehaald en kan het mailtje verzonden worden.
- Wanneer de cel in de Kolom 'CC' leeg is komt i.p.v een e-mailadres een 0 tevoorschijn in de verwijzing. Hierdoor wordt het mailtje niet verzonden, ook niet naar het hoofdcontact.

Zie bijlage voor mijn macro tot nu toe. Verder heb ik onderaan het bericht een format van mijn bestand geplaatst. Hoe krijg ik mijn macro nu wel werkend als er geen e-mailadres in de kolom van CC staat?

Ik hoor graag van jullie!
[SQL]
Sub MailLev()
Dim Source As Range
Dim Dest As Workbook
Dim wb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim OutApp As Object
Dim OutMail As Object
Dim strTo As String

Set Source = Nothing
On Error Resume Next
Set Source = Selection.SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If Source Is Nothing Then
MsgBox "The source is not a range or the sheet is protected, please correct and try again.", vbOKOnly
Exit Sub
End If

If ActiveWindow.SelectedSheets.Count > 1 Or _
Selection.Cells.Count = 1 Or _
Selection.Areas.Count > 1 Then
MsgBox "Helaas Pindakaas:" & vbNewLine & vbNewLine & _
"Je bent geen regels geselecteerd," & vbNewLine & _
"selecteer de gewenste regels & de juiste leverancier.", vbOKOnly
Exit Sub
End If

With Application
.ScreenUpdating = False
.EnableEvents = False
End With

Set wb = ActiveWorkbook
Set Dest = Workbooks.Add(xlWBATWorksheet)

Source.Copy
With Dest.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial Paste:=xlPasteValues
.Cells(1).PasteSpecial Paste:=xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False
End With

TempFilePath = Environ$("temp") & "\"
TempFileName = "Overzicht openstaande orderregels " & Format(Now, "dd-mmm-yy h-mm-ss")

If Val(Application.Version) < 12 Then

FileExtStr = ".xls": FileFormatNum = -4143
Else

FileExtStr = ".xlsx": FileFormatNum = 51
End If

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With Dest
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
With OutMail
.To = ThisWorkbook.Sheets("Orderregels").Range("A4").Value
.CC = ThisWorkbook.Sheets("Orderregels").Range("A6").Value
.BCC = ""
.Subject = "Openstaande order(s)"
.Body = "Beste," & vbNewLine & vbNewLine & "In de bijlage vindt u een Excelbestand met een overzicht van openstaande orderregels "

.Attachments.Add Dest.FullName
.Send
End With
On Error GoTo 0
.Close savechanges:=False
End With

Kill TempFilePath & TempFileName & FileExtStr

Set OutMail = Nothing
Set OutApp = Nothing

With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub


[/SQL]Bekijk bijlage Format overzicht helpmij.nl 2.0.xlsx
 
Laatst bewerkt:
Haal eerst die On Error Resume Next eruit, anders zie je het niet als er iets mis gaat.
Stel dan de variabelen buiten de With outmail samen.
Dan kan je ze voor het mailen controleren.
 
Dit zou moeten werken:
Code:
            .TO = IIf(ThisWorkbook.Sheets("Lijst1").Range("A4").Value = "", "", ThisWorkbook.Sheets("Lijst1").Range("A4").Value)
            .CC = IIf(ThisWorkbook.Sheets("Lijst1").Range("A6").Value = "", "", ThisWorkbook.Sheets("Lijst1").Range("A6").Value)
 
Hoi Edmoor,

De Error Resume Next is er uit, alleen als hij nu vastloopt kan ik niks meer in het Excel bestand merk ik.
De toevoeging van de cc is de laatste optie om het hele Excel bestand draaiend te krijgen ..
 
Dit zou moeten werken:
Code:
            .TO = IIf(ThisWorkbook.Sheets("Lijst1").Range("A4").Value = "", "", ThisWorkbook.Sheets("Lijst1").Range("A4").Value)
            .CC = IIf(ThisWorkbook.Sheets("Lijst1").Range("A6").Value = "", "", ThisWorkbook.Sheets("Lijst1").Range("A6").Value)


Het werkt niet, komt denk ik omdat de macro het (eventuele) e-mailadres uit een cel haalt gevuld wordt met Vert. zoeken. Hierdoor kan er dus ook een 0 komen te staan als Vert zoeken geen data vindt .. en dan loopt hij vast
 
Hoi Edmoor,

De Error Resume Next is er uit, alleen als hij nu vastloopt kan ik niks meer in het Excel bestand merk ik.
De toevoeging van de cc is de laatste optie om het hele Excel bestand draaiend te krijgen ..

Dan moet je de fout goed opvangen en verhelpen.
 
Het werkt niet, komt denk ik omdat de macro het (eventuele) e-mailadres uit een cel haalt gevuld wordt met Vert. zoeken. Hierdoor kan er dus ook een 0 komen te staan als Vert zoeken geen data vindt .. en dan loopt hij vast

Daarom zeg ik, doe dat soort dingen buiten de With Outmail, dan kan je het allemaal netjes controleren.
 
Dan test je toch op 0? Beetje eigen initiaf kan geen kwaad :).
Code:
     .TO = IIf(ThisWorkbook.Sheets("Lijst1").Range("A4").Value = 0, "", ThisWorkbook.Sheets("Lijst1").Range("A4").Value)
     .CC = IIf(ThisWorkbook.Sheets("Lijst1").Range("A6").Value = 0, "", ThisWorkbook.Sheets("Lijst1").Range("A6").Value)
 
Wat is de vraag eigenlijk? .. zegt niet zoveel.
 
Zonder je document en de rest van de macro te kennen zou ik er zoiets van maken, zoals ik al eerder zei:
Code:
        With ThisWorkbook.Sheets("Lijst1")
            sTO = .Range("A4").Value
            sCC = .Range("A6").Value
        End With
        
        If sTO = "" Then
            MsgBox "Email adres onbekend"
            Exit Sub
        End If
        
        If sCC = "" Then
            MsgBox "CC adres onbekend"
            Exit Sub
        End If
        
        sSJ = "Openstaande order"
        sBD = "Beste," & vbNewLine & vbNewLine & "In de bijlage vindt u een Excelbestand met een overzicht van artikelen."
        
        With OutMail
            .TO = sTO
            .CC = sCC
            .BCC = ""
            .Subject = sSJ
            .Body = sBD
            .Attachments.Add Dest.FullName
            .Send
        End With
        .Close savechanges:=False
    End With

Of een email adres een geldig formaat heeft kan je testen met deze functie:
Code:
Public Function ValidateEmailAddress(ByVal strEmailAddress As String) As Boolean
    On Error GoTo Catch
    
    Dim objRegExp As New RegExp
    Dim blnIsValidEmail As Boolean
    
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"
    
    blnIsValidEmail = objRegExp.Test(strEmailAddress)
    ValidateEmailAddress = blnIsValidEmail
      
    Exit Function
Catch:
End Function

Daarvoor moet je in de verwijzingen wel het volgende aan zetten:
RegExp.jpg

De controle voor het CC adres wordt dan dit:
Code:
If Not ValidateEmailAddress(sCC) Then
    sCC = ""
End If
Zo mag CC leeg zijn of iets bevatten dat geen geldig email adres is.
De Outmail loopt er dan niet op stuk.
 
Laatst bewerkt:
Goedemiddag heren,

Om alles even overzichtelijk te maken heb ik een format van het bestand ingevoegd evenals de Macro.
Het doel van de macro is het volgende:

1. Selecteer de regels (of cellen) waarvan je informatie wil ophalen. (Deze worden opgehaald uit een draaitabel)
2. Selecteer je contactpersoon (deze komt uit een dropdownmenu op basis van de contacten) Hierna wordt in de cellen A4 en A6 m.b.h. Vert zoeken het e-mailadres weergegeven
3. Druk op de macro (hierdoor worden de geselecteerde orderregels naar het geselecteerde contactpersoon gemaild)
 
Laatst bewerkt:
Ik was te snel! Heb de macro ondertussen aan de praat! mag een slotje op! :)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan