Filteren van e-mail bericht

Status
Niet open voor verdere reacties.

Toasty

Gebruiker
Lid geworden
30 mei 2014
Berichten
50
Hallo allen,

Ik heb een code geschreven waarin ik de content van mijn query kan mailen. Ik zou deze graag ook eerst dynamisch willen filteren. Bijvoorbeeld door een rapport of formulier zodanig te filteren dat ik alleen de rijen krijg die ik wil zien. Mijn code kijkt in de query omdat ik gebruik maak van een recordset.

Code:
Public Sub Export_PO()

 On Error GoTo EH
 'Recordset variables
 Dim db As Database
 Dim rstOpenPurchaseOrders As Recordset
 Dim strSQL As String
 Dim strSubject As String
 Dim strBody As String
 Dim strAddresses As String
 Set db = CurrentDb()
 strSQL = "SELECT * FROM qry_POOpenOrdersPerVendor;"
 Set rstOpenPurchaseOrders = db.OpenRecordset(strSQL, dbOpenDynaset)
 If Not rstOpenPurchaseOrders.EOF Then
 strBody = "blah blah blah" & vbCrLf & vbCrLf
 strBody = strBody & "Partnumber" & vbCrLf
 strBody = strBody & "==========" & vbCrLf
 rstOpenPurchaseOrders.MoveFirst
 Do While Not rstOpenPurchaseOrders.EOF
 strBody = strBody & rstOpenPurchaseOrders![po_partnr] & vbCrLf
                       rstOpenPurchaseOrders.MoveNext
          Loop
      End If
      strSubject = "Here's my report!"
      strAddresses = "look.look@nmhg.com"
      DoCmd.SendObject acSendNoObject, , acFormatTXT, asAdresses, , , strSubject, strBody, True
      Exit Sub
EH:
     MsgBox Err.Number & " " & Err.Description
     Exit Sub
 End Sub

Iemand een idee hoe ik dit zo dynamisch mogelijk kan maken?

Gr,
 
Ik gebruik een vaste query voor het rapport, waarvan ik met VBA de SQL aanpas. Op die manier kun je het rapport simpel mailen, en hoef je verder niks te filteren. Een mailing kan dan in één keer naar een aantal klanten gaan, waarbij je dus in een lus steeds het KlantID verandert aan de rapportquery, zodat daar altijd één klant in zit. Hoef je ook de bodytekst niet op deze manier op te bouwen.
 
Dankje voor de tip. Ik wil echter graag dat de data eerst zichtbaar wordt om de ernst van de mail te kunnen bekijken en dan middels een knop de data los te verzenden. Is het mogelijk de query in een rapport of formulier dynamisch te filteren?
 
De data heb je toch neem ik aan op je formulier staan? Die filtering kun je dan overnemen in de query.
 
Je bedoelt dat ik datgene wat ik in mijn formulier gefilterd heb, over kan nemen in mijn query en dus vervolgens kan expoteren naar mijn e-mail? Dat zou perfect zijn, kan dat middels een standaard functie?
 
Zul je moeten programmeren vrees ik. Je query wordt dan iets als:
Code:
    strSQL = "SELECT * FROM qry_POOpenOrdersPerVendor "
    strSQL = strSQL & "WHERE " & Me.Filter
 
Ik heb een (bijna) oplossing gevonden zoekende op dit forum.
Ik liep tegen het volgende aan:
Code:
Expr1: (IIf([Forms]![frm_POOpenOrdersPerVendor]![Text246] Is Null,True,[po_partnr]=[Forms]![frm_POOpenOrdersPerVendor]![Text246]))
met als criteria
Code:
<>False
Dit in combinatie met lege (unbound) veld [Text246] werkt qua filter op de query perfect. Ik moet nog wel even het Tekstveldje netjes namen. Complimenten hiervoor en dankje!

Ik krijg nu echter de fout: 3061 Too few parameters. Expected 1. Ik zoek op een veld met niet-nummerieke waarden.
 
Ik zoek op een veld met niet-nummerieke waarden.
Dat snap ik niet helemaal; het extra veld levert ofwel TRUE of als het formulierveld leeg is, of de vergelijking [po_partnr]=[Forms]![frm_POOpenOrdersPerVendor]![Text246] wordt uitgevoerd, en die is TRUE of FALSE. Hoe dan ook, er komt altijd TRUE uit of FALSE, geen tekst of een getal (hoewel een Boolean natuurlijk ook een getal is). <>FALSE moet dus altijd goed gaan. Maar ik vermoed dat er nog andere zaken spelen in de query :).
 
Hi Michel,

het filteren gaat perfect. Alleen nadat ik gefilterd heb, kan ik mijn eerstgeposte module niet meer draaien. Ik denk dat het komt doordat ik de recordset update. Kan dat? Ik zet functioneel de volgende stappen:

Run het continuous form
Filter op datgene ik wil mailen
Run de module die mijn query partnummers naar outlook exporteerd

De laatste stap werkt niet als ik de filter toevoeg. Of ik hem nu wel, of niet gebruik.
 
Je probleem wordt veroorzaakt doordat je een tabel (achter een query) opent die al open is. En dat gaat niet.
 
Ik snap niet hoe dat zou kunnen. Heb je enig idee waar ik dan moet zijn in mijn code en hoe ik dit zou kunnen verhelpen?
 
Dat is zo, omdat je formulier op dezelfde query is gebaseerd als de query die je opent met de code. Je kunt wel een kopie openen van de recordset:
Code:
    Set rst = Me.RecordsetClone
 
Hartelijk bedankt voor je reacties. Dat waardeer ik. Ik kan alleen niet uitvogelen hoe mijn code er dan uit zou komen te zien. Mag ik vragen hoe en waar deze aanpassing dan te maken?
 
Je hoeft alleen maar de Recordset aan te passen. Ik heb overigens de naam van je recordset ingekort; er is weinig reden om van variabele namen halve boeken te maken :). Nog één punt: het formulier moet dan wel alle velden bevatten die je in je recordset gebruikt. Dat doe je nu niet. Ze hoeven overigens niet zichtbaar te zijn.
 
Wanneer ik dat probeer kom ik op niets uit. Ik mag blijkbaar geen "me." verwijzing plaatsen. Ik denk dat ik iets structureel fout doe.

Inderdaad heb je gelijk in. Ik heb hem die naam gegeven omdat ik dan dezelfde optie op een ander formulier uit elkaar kan houden.
 
Was ik vergeten te zeggen; ik heb de hele santekraam aan code verplaatst naar de knop. Het heeft niet zoveel zin om daar een aparte module voor te gebruiken, want je verwijst specifiek naar één bepaalde tabel. Dus hou alles gewoon op het formulier.
 
Hi Octa,

super bedankt voor alle tips en hulp. Het is me gelukt. Ik kon de recordset alleen kopieren als ik hem inderdaad voledig verplaatste naar de formuliercode. De knop om te mailen heb ik ook in het subformulier zelf gezet, en nu werkt het als een tierelier!

Alleen nog even finetunen (e-mail adres automatisch laten inladen etc, en dan is hij klaar voor gebruik. Super bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan