17. august 2005 - 18:25Der er
36 kommentarer og 1 løsning
Loop funktion ønskes i kommandoknap
Jeg har indsat en kode i en kommandoknap der sender en mail til den adresse der står i me!email. Det jeg ønsker er en loop funktion der sender til alle emails der ligger i tabellen "tabel email" i feltet "email".
Koden ser nu ud som nedenstående:
Dim SQLStr As String If Me!Email <> "" Then SQLStr = SQLStr & "[email] like '*" & Me!Email & "*' And " End If If Me![ult løn] <> "" Then SQLStr = SQLStr & "[ult løn] like '*" & Me![ult løn] & "*' And " End If If Len(SQLStr) = 0 Then DoCmd.OpenReport "RAPP rapport email udsending uden kriterie", acViewPreview DoCmd.Close acForm, "send mails" Else SQLStr = Left(SQLStr, Len(SQLStr) - 5) DoCmd.OpenReport "RAPP rapport email udsending uden kriterie", acViewPreview, , SQLStr DoCmd.SetWarnings False DoCmd.OutputTo acOutputReport, "RAPP rapport email udsending uden kriterie", acFormatRTF, "c:\dpoversigt til - " & Date & ".rtf", False DoCmd.SendObject acSendReport, "RAPP rapport email udsending uden kriterie", acFormatRTF, Me.Email, , , "test", , True DoCmd.SetWarnings True DoCmd.Close acReport, "RAPP rapport email udsending uden kriterie" End If
Dim db as recordset Set rs = currentdb.openrecordset("DinTabel") do until rs.EOF If Me!email ... then docmd.SendObject bla bla end if rs.movenext loop rs.close Set rs = nothing
Skal der ikke være en reference til feltet "email" i tabellen ? Ihvertfald sker der det at når jeg trykker på kommandoknappen, så åbnes en mail der indeholder alle records, hvor det var meningen der skulle åbnes en separat mail for de records der indeholder mailadressen i tabellen.
F.eks. hvis tabellen indeholder mail1@mail.dk og mail2@mail.dk. Hvis man så trykker på kommandoknappen skal mailen åbnes til den første mailadresse med rapporten vedhæftet med de records med samme mailadresse. Bagefter skal mailen åbnes til den næste mailadresse osv...
enne er afprøvet på den måde, at jeg har indtastet min adresse 2 gasnge i tabellen, og jeg modtager e-mailen 2 gange:
Dim db As Recordset Dim VARa As String VARa = Me!email Set rs = CurrentDb.openrecordset("TBlemail") Do Until rs.EOF DoCmd.SendObject acReport, "Rapport1", "HTML(*.html)", VARa, "", "", "Hej", "Tekst", False, "" rs.MoveNext Loop rs.Close Set rs = Nothing
Det ser ud som om, at selvom man har 2 forskellige emailadresser i tabellen, så sender den 2 gange til samme. Rapporten indeholder også alle records, det skal kun være dem der er = [ult løn] og dem der har samme email som email feltet i tabellen
Problemet med kriterierne [ult løn] og [email] er løst. Tilbage er kun problemet med at den skal bruge email adresser fra tabellen. Og en tilføjelse er at jeg skal udfylde [email] i formularen og det er ikke meningen, da adresserne kun skal hentes fra tabellen
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim VARa As String Set rs = New ADODB.Recordset Set cn = New ADODB.Connection Set cn = CurrentProject.Connection rs.Open "DIN TABEL", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst Do Until rs.EOF VARa = rs!FELT MED E-MAIL DoCmd.SendObject acReport, "Rapport1", "HTML(*.html)", VARa, "", "", "Hej", "prøve", False, "" rs.MoveNext Loop rs.Close cn.Close
Det er sandsynligvis fordi du mangler en reference. Prøv at se i VBA-editoren om der ud for en reference står ordet "MISSING". Gør der det skal du markere referencen. Hvis du ikke har en reference til ADO skal du prøve at tilføje den. Hvis du lægger din e-mail kan jeg sende dig et screenshot af mine referencer.
Det var microsoft acitivex data objects 2.1 library der manglede. Den skriver dog ikke mailadresse i mailen. Jeg har sat edit message til true, så jeg trykker på send istedet for at vente på at kunne trykke ja. Ser sådan her ud:
Private Sub Kommandoknap161_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim VARa As String Dim SQLStr As String If Me!Email <> "" Then SQLStr = SQLStr & "[email] like '*" & Me!Email & "*' And " End If If Me![ult løn] <> "" Then SQLStr = SQLStr & "[ult løn] like '*" & Me![ult løn] & "*' And " End If If Len(SQLStr) = 0 Then DoCmd.SendObject acReport, "Rapp rapport email udsending uden kriterie", acFormatRTF, VARa, "", "", "Hej", "Tekst", True, "" Else SQLStr = Left(SQLStr, Len(SQLStr) - 5) DoCmd.OpenReport "RAPP rapport email udsending uden kriterie", acViewPreview, , SQLStr DoCmd.SendObject acReport, "Rapp rapport email udsending uden kriterie", acFormatRTF, VARa, "", "", "Hej", "Tekst", True, "" DoCmd.Close acReport, "RAPP rapport email udsending uden kriterie" End If Set rs = New ADODB.Recordset Set cn = New ADODB.Connection Set cn = CurrentProject.Connection rs.Open "TABEL email", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst Do Until rs.EOF VARa = rs!Email rs.MoveNext Loop rs.Close cn.Close End Sub
Ja - Men kære ven, du skal jo have dine if-sætninger ind i løkken der henter e-mail fra tabellen. Prøv at se på min kode:
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim VARa As String Set rs = New ADODB.Recordset Set cn = New ADODB.Connection Set cn = CurrentProject.Connection rs.Open "DIN TABEL", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst Do Until rs.EOF VARa = rs!FELT MED E-MAIL DoCmd.SendObject acReport, "Rapport1", "HTML(*.html)", VARa, "", "", "Hej", "prøve", False, "" rs.MoveNext Loop rs.Close cn.Close
Der har jeg linien med Docmd.Send Object inde i løkken. Kopier dine if ind på den linien sammen med den rapport der skal sendes.
Bemærk også, at du her:
If Me!Email <> "" Then
Refererer til en formular. Det skrev du tidligere, at du ikke ville.
Jeg får en fejl pga. linien: rs.Open "DIN TABEL", cn, adOpenKeyset, adLockOptimistic Den siger der er en ugyldig sql sætning
Ellers ser det nu sådan ud: Private Sub Kommandoknap161_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim VARa As String Dim SQLStr As String Set rs = New ADODB.Recordset Set cn = New ADODB.Connection Set cn = CurrentProject.Connection rs.Open "TABEL email", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst Do Until rs.EOF VARa = rs!Email If Me![ult løn] <> "" Then SQLStr = SQLStr & "[ult løn] like '*" & Me![ult løn] & "*' And " End If If Len(SQLStr) = 0 Then DoCmd.SendObject acReport, "Rapp rapport email udsending uden kriterie", acFormatRTF, VARa, "", "", "Hej", "Tekst", True, "" Else SQLStr = Left(SQLStr, Len(SQLStr) - 5) DoCmd.OpenReport "RAPP rapport email udsending uden kriterie", acViewPreview, , SQLStr DoCmd.SendObject acReport, "Rapp rapport email udsending uden kriterie", acFormatRTF, VARa, "", "", "Dagpengerefusionsliste for lønperiode " & [ult løn], "Dagpengerefusionslisten er vedhæftet denne mail", True, "" DoCmd.Close acReport, "RAPP rapport email udsending uden kriterie" End If rs.MoveNext Loop rs.Close cn.Close End Sub
SQLStr = SQLStr & "[ult løn] like '*" & Me![ult løn] & "*' And " er fordi det kun er de records der har samme [ult løn] som jeg skriver i feltet i formularen.
Er det slutningen af denne linie du mener ? DoCmd.OpenReport "RAPP rapport email udsending uden kriterie", acViewPreview, , SQLStr
Prøv at gå ind på thomasjepsens hjemmeside makeITeasy og under dowmloads øverst til højre og led efter det eksempel der hedder dynamisk søgefunktione. Her vil du i modulet se denne:
SQLStr = SQLStr & "[" & Mid(Ctrl.Name, 4) & "] = '" & Ctrl & "' And " End If Case "Fritekst" If Ctrl <> "" Then SQLStr = SQLStr & "[" & Mid(Ctrl.Name, 4) & "] Like '*" & Replace(Ctrl, "'", "?") & "*' And "
Hvor SQLStr først defineres, for senere at bruges i flere sammenhænge.
Du sendte den , men blev afvist da den ikke var zippet, og du sendte den ikke igen. Men jeg mener ikke det nytter noget, idet din SQL stadig ikke er defineret:
SQLStr = SQLStr & "[ult løn] like '*" & Me![ult løn] & "*' And "
SQLStr på højre side af = er ikke defineret.
Jeg er ikke verdensmester i dette, så hvis andre har input hører jeg lige så gerne som dane022.
Prøv at se om du har modtaget den nu, jeg sendte den ellers da jeg modtog din mail. Hvis du ikke kan finde ud af det er der ikke noget at gøre ved det, så må jeg oprette et nyt spørgsmål. Ellers ved jeg ikke hvad jeg skal gøre
Ja, der er ikke nogen fejlmeddelse og loop funktionen fungerer. Jeg forstår bare ikke at samme rapport sendes til alle mailadresser. Kan man ikke få den til at afgrænse på VARa ?
Jeg har prøvet med denne sætning, men får at vide at der er en syntaksfejl fordi der mangler en operator i forespørgselsudtrykket
If VARa <> "" Then SQLStr = SQLStr & VARa & " like '*" & VARa & "*' And " End If
Det er jo den sætning du ikke kan lide, men den fungerer for [ult løn] feltet.
Det er ikke meningen at der skal sendes alt til alle, men kun noget til nogen. Det er kun de records der matcher den mailadresse der sendes til, der skal medtages i rapporten.
Jeg havde tidligere en combo box til manuelt at udvælge mailadressen, men det var ikke hensigtsmæssigt. Der kan være omkring 30-50 forskellige email adresser der hver især skal modtage dele af den samlede rapport.
Hidtil har man udskrevet den samlede rapport og så i kuverter pakket ud til hvert enkelt sted, så der burde være noget tid at spare.
Du har tidligere haft lavet en anden udsøgningsmetode til mig i en anden database, som ser sådan ud: DoCmd.OpenReport "rapp rapport email udsending uden kriterie", acViewPreview, , "[forsp rapport til månedlig udsending uden kriterie]![email]= '" & Me![Email] & "'"
Jeg har lavet den lidt om så den passer til denne database, men jeg kan ikke få det til at virke. Spørgsmålet er også om det kan bruges i denne sammenhæng ?
Det burde fungere i denne sammenhæng også. Men du skriver at du ike kan få det til at fungere. Men vigtigst af alt:
- Får du nogen fejlmelding? - Når fejlen opstår og du trykker på DeBug, hvilken linie er da markeret? - Hvis ikke nogen af ovenstående passer, hvordan ytrer fejlen sig?
En bemærkning som "det virker ikke " er ikke til megen nytte i en fejlfinding.
Det sidste problem med [institution] er endnu ikke rettet, men du har hjulpet mig med det som indlægget gik ud på, så selvfølgelig skal du have dine point
Nu har jeg slettet alt hvad jeg har fået fra dig, men det forekommer mig, at problemet har været løst. Kan du forklare nærmere og evt. sende din db igen.
Så er problemet løst, slutkoden kom til at se sådan ud:
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim VARa As String Dim VARb As String Set rs = New ADODB.Recordset Set cn = New ADODB.Connection Set cn = CurrentProject.Connection rs.Open "TaBeLemail", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst Do Until rs.EOF VARa = rs!Mail VARb = rs!Institution DoCmd.OpenReport "rapp rapport email udsending uden kriterie masseforsendelse", acViewPreview, , "[tabel person / periode]![ult løn]= '" & Me![Ult løn] & "' and [tabel konto]![email]= '" & VARa & "'" DoCmd.SetWarnings False DoCmd.SendObject acReport, "rapp rapport email udsending uden kriterie masseforsendelse", acFormatRTF, VARa, "", "", "Dagpengerefusionsliste for lønperiode " & [Ult løn] & " til " & VARb, "Dagpengerefusionslisten er vedhæftet denne mail som word dokument", True, "" DoCmd.OutputTo acOutputReport, "RAPP rapport email udsending uden kriterie masseforsendelse", acFormatRTF, "c:\dpoversigt for lønperiode " & [Ult løn] & " til " & VARb & " - sendt " & Date & ".rtf", False DoCmd.Close acReport, "rapp rapport email udsending uden kriterie masseforsendelse" DoCmd.SetWarnings True rs.MoveNext Loop rs.Close cn.Close End If
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.