Avatar billede dane022 Seniormester
17. august 2005 - 18:25 Der 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
Avatar billede mugs Novice
17. august 2005 - 21:14 #1
Løkken kan se nogenlunde således ud:

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

Kræber reference til DAO.
Avatar billede dane022 Seniormester
17. august 2005 - 22:22 #2
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...
Avatar billede mugs Novice
18. august 2005 - 16:31 #3
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
Avatar billede dane022 Seniormester
18. august 2005 - 20:31 #4
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
Avatar billede dane022 Seniormester
18. august 2005 - 21:01 #5
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
Avatar billede mugs Novice
18. august 2005 - 21:25 #6
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
Avatar billede dane022 Seniormester
18. august 2005 - 21:44 #7
Hvis jeg får fejlen, user-defined type not defined. Er det så fordi jeg ikke har reference til ADO ?
Avatar billede mugs Novice
18. august 2005 - 21:48 #8
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.
Avatar billede dane022 Seniormester
18. august 2005 - 21:53 #9
Jeg kan ikke se der står missing. !!brian_moeller@ishoejby.dk!! uden !
Avatar billede dane022 Seniormester
18. august 2005 - 22:07 #10
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
Avatar billede mugs Novice
18. august 2005 - 22:16 #11
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.
Avatar billede dane022 Seniormester
18. august 2005 - 22:22 #12
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
Avatar billede dane022 Seniormester
18. august 2005 - 22:24 #13
Jeg mener linuien ser sådan her ud:rs.Open "TABEL email", cn, adOpenKeyset, adLockOptimistic
Avatar billede mugs Novice
18. august 2005 - 22:28 #14
Ja hvis din tabel hedder "Tabel email". Men jeg tror nu ikke fejlen ligger der, men kontroller at tabelnavnet er stavet korrekt.

Når du får fejlen ugyldig SQL sætning, må fejlen ligge i din SQL.

I denne linie.

SQLStr = SQLStr & "[ult løn] like '*" & Me![ult løn] & "*' And "

Definerer du, at SQLStr skal være = sig selv??? Men hvor definerer du SQLStr?
Avatar billede dane022 Seniormester
18. august 2005 - 22:35 #15
Tabelnavn er korrekt.

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
Avatar billede mugs Novice
18. august 2005 - 22:40 #16
Nej - Denne:

SQLStr = SQLStr & "[ult løn] like '*" & Me![ult løn] & "*' And "

Du skriver at SQLStr skal være = SQLStr. Hvor skal koden finde SQLStr? Den er aldrig blevet defineret.

Jeg slutter for iaften.
Avatar billede mugs Novice
18. august 2005 - 22:43 #17
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.
Avatar billede dane022 Seniormester
18. august 2005 - 22:48 #18
Må jeg sende en forkortet udgave af databasen til dig imorgen ?
Avatar billede dane022 Seniormester
25. august 2005 - 20:18 #19
Mugs, har du sendt databasen til mig ? Kan jeg være kommet til at slette mailen ved en fejl ?
Avatar billede mugs Novice
25. august 2005 - 20:23 #20
Jeg har aldrig modtaget den.

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.
Avatar billede dane022 Seniormester
25. august 2005 - 20:33 #21
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
Avatar billede mugs Novice
25. august 2005 - 20:38 #22
Jeg har modtaget den nu - Ved ikke hvad der er gået galt, måske min fejl - Men jeg ser på det om lidt.
Avatar billede mugs Novice
25. august 2005 - 21:10 #23
Db er returneret.
Jeg har ændret nogle objektnavne, så de ikke har mellemrum eller specialtegn i navnene.

http://www.mvps.org/access/tencommandments.htm

ALDRIG MELLEMRUM ELLER SPECIALTEGN I OBJEKTNAVNE
Avatar billede mugs Novice
25. august 2005 - 21:37 #24
Kan du få det til at fungere?
Avatar billede dane022 Seniormester
25. august 2005 - 21:58 #25
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.
Avatar billede mugs Novice
25. august 2005 - 22:12 #26
VARa henviser jo til tabellen:

VARa = rs!Email

og vil derfor sende til alle adresser:

Prøv om du evt. kan indsætte adressen i din formular med en combo og henvis til den i stedet for til tabellen.

Slutter for iaften. Er kort tilbage FRE formiddag. Ellers først sent FRE aften.
Avatar billede mugs Novice
25. august 2005 - 22:20 #27
M.h.t. din SQL sætning må jeg trække mig. Jeg havde uret.
Avatar billede dane022 Seniormester
25. august 2005 - 22:28 #28
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.
Avatar billede mugs Novice
25. august 2005 - 22:37 #29
Det er også muligt at begrænse adressaterne, men du behøver et kriterie i din formular. Noget i stil med.

Where et eller andet = [Forms]![Formularnavn]![Feltnavn]
Avatar billede dane022 Seniormester
27. august 2005 - 12:37 #30
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 ?
Avatar billede mugs Novice
27. august 2005 - 19:37 #31
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.
Avatar billede mugs Novice
30. august 2005 - 20:36 #32
Tak for point - Hvad fik det på rette spor?
Avatar billede dane022 Seniormester
31. august 2005 - 20:43 #33
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
Avatar billede mugs Novice
31. august 2005 - 20:47 #34
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.
Avatar billede dane022 Seniormester
31. august 2005 - 20:59 #35
Nu har jeg sendt en mail til dig
Avatar billede dane022 Seniormester
31. august 2005 - 23:00 #36
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
Avatar billede mugs Novice
01. september 2005 - 06:40 #37
:o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester