Formulier mailen naar inhoud van selectie veld

Status
Niet open voor verdere reacties.

galletje

Gebruiker
Lid geworden
8 jun 2010
Berichten
70
Beste Forum leden,

Ik zit met de volgende vraag. Ik heb een formulier gemaakt met diverse inputvelden. In het veld genaamd "RPS" kan je een selectie maken welk persoon de escalatie zal overnemen. Tot zover geen probleem, nu zou ik graag zien dat op het moment dat er daar een naam staat en er op de knop opslaan en Exit word gedrukt, er een mail uitgaat naar de persoon die geselecteerd is in het veld "RPS".

Is dit mogelijk in Access?

De mailadressen heb ik opgeslagen in de tabel "tblmedewerkers"

Als bijlage heb ik de file toegevoegd.

Alvast mijn dank

John

Bekijk bijlage test.rar
 
Laatst bewerkt:
Je geeft niet aan wat er in die mail moet staan, en dat maakt een goed antwoord bijna onmogelijk. Maar om een aantal richtingen te geven: je kunt een rapport maken waar alle gewenste details in staan, en dat mailen, of je kunt een mail opstellen in VBA die je met een Outlook connectie verstuurt. Er is wel een stukje voorwerk nog nodig...
 
Beste Michel Even een voorbeeld van wat ik bedoel.

Stel persoon A vult het formulier in. Op het moment dat hij hem heeft ingevuld moet het formulier(printscreen of pdf versie) worden gemaild naar de persoon die staat in het invoerveld genaamd "RPS" In de mail staat alleen maar een tekst zoiets van "er is een escalatie voor je klaar gezet" en de pdf versie van het invulformulier als bijlage of printscreen.

Het mailadres moet hiervoor uit het tabel tblescalatie worden gehaald aan de hand van welke naam er geselecteerd is in het invoerveld van het formulier.

Ik heb het wel voor elkaar gekregen om een mail te sturen via een code in BVA, maar daar geef ik zelf dan een emailadres op die dan altijd gelijk blijft en niet veranderd.

Misschien is het probleem nu een stukje duidelijker.

thanks

John
 
Laatst bewerkt:
Een printscreen automatisch maken en versturen? Dat kun je gevoegelijk vergeten. Een PDF maken van een formulier? Formulieren druk je niet af, al kan dat uiteraard nog wel, en een afdruk naar PDF zou dus ook wel moeten. Maar waarom maak je geen rapport dat je mailt? Dat is een techniek die voor deze taak gemaakt is, dus waarom gebruik je die niet? Je zegt dat je al een procedure hebt voor de mail, maar ik zie 'm toch niet terug in je project. Het lijkt mij een beetje onzinnig dat wij 'm nog een keer maken, als je hem al hebt. Dus ik zou zeggen: doe 'm er nog bij, dan kunnen we je op basis daarvan al wel aangeven hoe je een variabel email adres kunt gebruiken. Overigens mail je dan vermoed ik niet op basis van een rapport.... Maar zoals ik eerder al zei: er zijn veel verschillende manieren ;)
 
Michel,

Is er er dan een mogelijkheid om een formulier om te zetten naar een rappoort op het moment dat de gebruiker op de "knop opslaan"drukt. We willen voorkomen dat hij meerdere handelingen moet doen. Dus na het invullen van het formulier zou hij eingelijk niks meer moeten doen en het formulier/rapport worden verstuurd naar de persoon in de selectievak"RPS"

Dit is de code die ik gebruik voor het formulier te versturen.

Private Sub qsave_Exit(Cancel As Integer)
DoCmd.SendObject acSendForm, "frmescalatie", acFormatPDF, "emailadres@nl.com", , , "Escalatie afgemeld", "Er is een escalatie afgemeld door een RPS", False
End Sub

Als ik bovenstaande gebruik maakt hij een pdf van alle records en mailt hij ze naar het opgegeven emailadres. Dit is trouwens ook niet goed omdat hij eigelijk alleen maar het huidige record zou moeten versturen. Met deze code verstuurd hij namelijk alle records.

Misschien kan je hier eens je blik opwerpen.

ALvast mijn dank

John
 
Met SendObject kun je alleen een complete set records versturen. daarbij maakt het niet uit of dat een rapport of een formulier is. Maar formulieren moet je niet gebruiken in je communicatie met de buitenwereld; daar heb je nu eenmaal rapporten voor. Maak dus een rapport met (vermoedelijk) dezelfde gegevensbron als je formulier, en verstuur dat rapport. Dat moet dus gefilterd worden op het gekozen record in het formulier, en dat is op zich niet zo moeilijk. Alternatief is, om de bron van het rapport aan te passen, en het filter dus hard in het rapport te zetten met vba. Daarvoor moet het rapport worden geopend in Hidden Design view, vervolgens de RecordSource worden aangepast en het rapport weer worden opgeslagen. Daarna kan het met SendObject worden verstuurd.
 
Beste OctaFish,

Bedankt voor je uitleg als eerste, aan de hand hiervan ben ik wat verder gaan sleutel en toto onderstaand gekomen. Op 1 punt je na werkt hij nu zoals ik wil, echter laat hij het rapport leeg en vuld hij niet het ID en de rest van de gegevens in van deze huidige record. Wat doe ik hierin verkeerd.

Private Sub Command120_Click()

'Mailen naar RPS
Dim strReportName As String
Dim strCriteria As String
strReportName = "Escalatie engineer rapport " & Me!ID
strCriteria = "ID=" & Me!ID
strRps = Me!Email
DoCmd.SendObject acSendReport, "Escalatie Engineer rapport", acFormatPDF, strRps, "john@mbs.nl", , "test", "mail", , False

End Sub

UPDATE: Legen rapport is opgelost foutje in formulier. Nu alleen nog dat hij alleen het huidige record pakt ipv alles.

Bedankt John
 
Laatst bewerkt:
Je kunt, zoals ik al zei, geen filter meegeven als je SendObject gebruikt. Je moet het rapport dan eerst openen, in de Recordbron het filter vastleggen, het rapport opslaan en dan mailen.
Een (behoorlijk uitgebreid) voorbeeldje dat ik zelf gebruik:

Code:
Private Sub cmdMailRapport_Click()
Dim strSQL As String, strSQL_Rapport As String
Dim sFilter As String, sTabel As String, sKlantNr As String
Dim x As Integer

strSQL = "SELECT * FROM qRapport"
sRapport = "rptPeriodiek"

DoCmd.Echo False, "Bezig met openen van recordset."
With CurrentDb.OpenRecordset(strSQL)
    'Records doorlopen, en rapport voor elk record instellen en mailen
    iAantal = .RecordCount
    If iAantal > 0 Then
        x = x + 1
        sKlantNr = rst.Fields("KlantID").Value
        DoCmd.Echo False, "Samenvoegen van Record " & x & " van " & iAantal & " records..."
        DoCmd.OpenReport sRapport, acViewDesign, , , acHidden
        sTabel = Reports(sRapport).RecordSource
        If InStr(1, UCase(sTabel), "WHERE") > 0 Then
            strSQL_Rapport = Left(sTabel, InStr(1, sTabel, "WHERE ") - 1)
        Else
            If InStr(1, UCase(sTabel), "SELECT") = 0 Then
                If InStr(1, sTabel, " ") > 0 And InStr(1, sTabel, "[") = 0 Then
                    sTabel = "[" & sTabel & "]"
                End If
                strSQL_Rapport = "SELECT * FROM " & sTabel & " "
            Else
                strSQL_Rapport = sTabel
            End If
        End If
        'Extra loopje, om de punt-komma's te verwijderen.
        Do Until Right(strSQL_Rapport, 1) <> ";"
            strSQL = Left(strSQL_Rapport, Len(strSQL_Rapport) - 1)
        Loop
        'Klantfilter op rapport zetten
        sFilter = " WHERE (KlantID=" & sKlantNr & ");"
        strSQL_Rapport = strSQL_Rapport & sFilter
        Reports(sRapport).RecordSource = strSQL_Rapport
        DoCmd.Close acReport, sRapport, acSaveYes
        DoCmd.SendObject acSendReport, sRapport, acFormatPDF, "mailadres@mail.com", , , "Subject", "Message", False
        .MoveNext
    End If
    .Close
End With

DoCmd.Echo True
End Sub
 
Beste OctaFish,

Bedankt voor je reactie ik ga hiermee aan de slag. Hoop dat ik er uit kom, gaat me nu een beetje boven me petje.

John
 
Als je een voorbeeld db kan posten, kan ik de code wel voor je inbouwen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan