• 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.

Automatische mail

Status
Niet open voor verdere reacties.

Richy1973

Gebruiker
Lid geworden
11 jan 2016
Berichten
40
Goedemorgen,

vorige week heb ik een VBA code gevonden op dit forum voor het automatisch laten versturen van een mail vanuit Excel. en dit is ook wat ik graag wil. ik heb deze toegevoegd aan mijn bestandje, echter krijg ik het niet werkend. ik zie wel dat Outlook iets doet, maar er wordt geen mail verstuurd.

ik ben niet echt thuis in VBA, ik kan knippen en plakken en aanpassen van bereiken ed.

in mijn voorbeeld bestandje zie ik of een datum verloopt of niet. van deze hele rij wil ik graag automatisch melding ontvangen.

Bekijk bijlage Certificaten beheer.xlsm

kan iemand mij uitleggen hoe ik dit aanpas?

Groet Richy.
 
Misschien ben ik de enige, maar het bestand is al een paar keer bekeken.
Het bestand wil niet opstarten, het rondje blijft maar draaien.
Ik kan natuurlijk lang wachten, maar ik heb het afgesloten.
 
Je controleert op een datum in kolom F en die staat daar niet, daar staat een serienummer. Het gedeelte voor het versturen van de mail wordt daardoor niet uitgevoerd.

@HSV:
In de code staat een Application.Wait van 30 seconden in de Workbook_Open onder de mail code.
 
Laatst bewerkt:
Bedankt @edmoor; op flauwekul zit ik natuurlijk niet te wachten.
 
Bedankt voor jullie reacties, dit wordt gewaardeerd.

nog een vraagje, waar staat de verwijzing naar kolom F, ik dacht dat ik H5 heb aangegeven maar goed, ik begrijp de code ook nog niet helemaal.

Private Sub Workbook_Open()

Dim cl As Range
With CreateObject("Outlook.Application").CreateItem(0)
For Each cl In Sheets(1).Columns(6).SpecialCells(2)
If IsDate(cl) Then
If cl.Value - 7 <= Date And cl.Offset(, -5) = "H5" Then
.To = "02@gmail.com"
.Subject = "Er is een datum die verloopt binnen nu en 7 dagen in cel " & cl.Address
.body = "gefeliciteerd"
.Send
End If
cl.Offset(, -5) = "verzonden"
End If
Next cl
Application.Wait DateAdd("s", 30, Now)
ThisWorkbook.Close 1
End With


End Sub

Maar als ik het dus goed begrijp verstuurd deze code wel de rijen die verlopen? en dan ook van alle tabbladen? of moet ik dit apart aangeven.

groet Richy.
 
Columns(6) is kolom F:
For Each cl In Sheets(1).Columns(6).SpecialCells(2)
 
nu wordt het mij duidelijk, en de tabbladen dat zijn de sheets, moet ik hier dan het aantal ingeven of de namen ingeven?

bedankt hoor!
 
Sheets(1) is Blad1. De code zoals je deze nu hebt kijkt naar de cellen op dat blad, niet naar meerdere bladen.
 
Dag Edmoor,

Is dit wel mogelijk, alle sheets meenemen? Moet ik dan de namen tussen aanhalingstekens zetten.
Of gewoon 1 tabblad aanhouden

Groet Richy.
 
Wat je wilt kan prima, maar dan kan je het beste even vertellen wat precies de bedoeling is. Dan wil ik daar wel een voorbeeldje voor maken.
 
Plaats bij voorkeur de code tussen codetags. Gebruik in voorbeeldbestandjes ook niet een Workbook_Open() event zonder dit te vermelden. Maar plaats het in een gewone module. Gebruik in voorbeeldbestanden ook geen .send of .print dit kan voor argeloze gebruikers nogal wat onverwachte acties opleveren.

Om de tabjes te doorlopen kan je zoiets gebruiken

Code:
With CreateObject("Outlook.Application").CreateItem(0)
    For Each sh In Sheets
        For Each cl In sh.Columns([SIZE=4][COLOR="#FF0000"]6[/COLOR][/SIZE]).SpecialCells(2)
            If IsDate(cl) Then
                If cl.Value - 7 <= Date And cl.Offset([SIZE=4][COLOR="#FF0000"], -5) <> "verzonden"[/COLOR][/SIZE] Then
                    .To = "abasbest02@gmail.com"
                    .Subject = "Er is een datum die verloopt binnen nu en 7 dagen in cel " & [COLOR="#FF0000"][SIZE=4]cl.Address[/SIZE][/COLOR]
                    .body = "gefeliciteerd"
                    [SIZE=4][FONT=Arial Black].display[/FONT][/SIZE]
                End If
            cl.Offset([SIZE=4][COLOR="#FF0000"], -5) = "verzonden"[/COLOR][/SIZE]
            End If
        Next cl
    Next sh
End With

Waarbij je het rode nog een beetje moet aanpassen.
 
Beste Edmoor,

Dit wordt een bestandje waar de keuringscertificatien in komen, deze moeten om de tijd gekeurd worden. Hier wil ik graag van te voren een mail van krijgen. Het bestand zelf wordt elke dag geopend door medewerkers, alleen de verantwoordelijke persoon moet hier eerder een mail van krijgen.

Het bestandje moet dan van elk tabblad het onderdeel wat uit de keuring loopt mailen.

Nogmaals ik heb deze code gevonden op het forum maar ik begreep niet precies wat elk onderdeel van de code doet. Nu is het iets duidelijker geworden.

@Vena, jouw suggestie ga ik morgen proberen, bedankt. En je adviezen wat betreft plaatsen neem ik ter harte ☺️.

Ik laat het resultaat wel even weten morgen, hoop ik...

Groet Richy.
 
Beste Edmoor en VeNa,

Ik ben even aan het prutsen geweest en kom er toch niet helemaal uit. Ik heb nu de colums(8) aangepast.
Maar ik kom nu even niet verder, wordt mij nu toch even te ingewikkeld. is het mogelijk dat 1 van jullie mij een voorbeeld bestandje maakt of uitlegt hoe ik en waar ik de code moet aanpassen. Is bijvoorbeeld cl.Adress de naam van de kolom waar de waarde instaat die verloopt?

ik hoop dat jullie mij verder willen helpen,

groet Richy.
 
Cl.Address is de celreferentie. Bijvoorbeeld $H$5.
Ik denk dat onderstaande code meer in de buurt komt van wat je nodig hebt.
Code:
Private Sub Workbook_Open()
    Dim Sh
    Dim Cl As Range
    
    With CreateObject("Outlook.Application").CreateItem(0)
        .To = "abasbest02@gmail.com"
        .Subject = "gefeliciteerd"
        For Each Sh In Sheets
            For Each Cl In Sh.Columns(8).SpecialCells(2)
                If IsDate(Cl) And Val(Cl.Value) - 7 <= Date And Cl.Offset(, -5) <> "verzonden" Then
                    .Body = .Body & "Er is een datum die verloopt binnen nu en 7 dagen in cel " & Sh.Name & "!" & Cl.Address & vbLf
                    Cl.Offset(, -5) = "verzonden"
                End If
            Next Cl
        Next Sh
        .Display
    End With
End Sub
 
Dag Timshel,

Ik probeer even de code te ontleden

Private Sub Workbook_Open()
Dim Sh
Dim Cl As Range

With CreateObject("Outlook.Application").CreateItem(0)
.To = "abasbest02@gmail.com"
.Subject = "gefeliciteerd" (onderwerp van de mail)
For Each Sh In Sheets
For Each Cl In Sh.Columns(8).SpecialCells(2)
(hier geef ik in aan welke kolom het resultaat bepaald, alle cellen in deze kolom)?
If IsDate(Cl) And Val(Cl.Value) - 7 <= Date And Cl.Offset(, -5) <> "verzonden" Then
(Hier wordt bepaald welke cel de datum bevat waarnaar gekeken moet worden om het resultaat te bepalen? Verzonden is het bericht wat je krijgt als er een mail wordt verstuurd?)
.Body = .Body & "Er is een datum die verloopt binnen nu en 7 dagen in cel " & Sh.Name & "!" & Cl.Address & vbLf
(Dit is de melding die je in de mail krijgt, te samen met de rijen die verlopen?)
Cl.Offset(, -5) = "verzonden"
End If
Next Cl
(Volgende kolom?)
Next Sh
(Volgend tabblad?)
.Display
(Weet ik niet)
End With
End Sub

Lees ik dit goed? Uiteraard ga ik deze code ook even proberen. Bedankt alvast.

Groet Richy.
 
Gebruik svp code tags als je code plaatst.
 
Dat is de verkeerde:
Gebruik de # in het scherm.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan