TBLxxx -> Tabel xxx
FLDxxx -> Felt xxx
FRMxxx -> Formular xxx
RPTxxx -> Rapport xxx
VARxxx -> Variabel xxx
1. I efterfølgende eksempel benyttes en database med kun én tabel indeholdende e-mailadresser, én ubundet formular indeholdende en kombinationsboks knyttet til denne tabel, samt en rapport. Benyttet software:
Windows XP
Access2000
Microsoft Outlook
Start med at lave tabellen der skal indeholde flg. felt:
FLDemail -> Tekstfelt
Du kan naturligvis tilføje flere felter som f.eks navn, post-adresse m.v. men det er denne artikel uvedkommende. Luk og gem tabellen navngiv den TBLemail. Udfyld feltet FLDemail med nogle få gyldige e-mailadresser. For at afprøve funktionen uden at forstyrre sagesløse mennesker, så indtast din egen emailadresse, så du kan sende til dig selv
Lav herefter en rapport med postkilde i tabellen, og navngiv rapporten RPTemail.
2. Opret en ubundet formular (Navn FRMemail) og sæt en kombinationsboks fra din værktøjskasse i Detaljesektionen. (Denne kombinationsboks vil blive navngivet af Access, men for at beholde navngivningskonventionen, så kan du navngive den FLDcomboemail)
Hvis dine guider er slået til følger du blot guiden. Hvis du ikke har guider slået til, skriver du følgende under Rækkekilde i fanen Data:
3. Ligeledes tager du en kommandoknap fra værktøjskassen og sætter den i Detaljesektionen. Du skal nu have programmeret hvilken handling Access skal udføre, når du trykker på knappen. Syntaksen for afsendelsen er således:
DoCmd.SendObject 1 arg , "2 arg", "3 arg", "4arg", "5arg", "6 arg", "7 arg", "8 arg", False, "9 arg"
Idet "1 arg", "2 arg" o.s.v henviser til handlingens argumenter således:
-1. argument er den objekttype du evt. vil vedhæfte.
-2. argument er Objektnavnet på en evt. vedhæftet rapport.
-3. argument er hvilket Outputformat rapporten skal have.
-4. argument er modtagerens e-mailadresse.
-5. argument er Cc adressat.
-6. argument er Bcc adressat.
-7. er e-mailens emne.
-8. er e-mailens tekst (Brødtekst).
-False betyder, at du ikke vil redigere meddelelsen inden afsendelse.
-9. er til markering om benyttelse af en skabelonfil.
4. Argumenterne 1 og 2 er valgfrie og skal blot være tomme, hvis der ikke skal vedhæftes en rapport. Hvis argument 1 er udfyldt er 2 og 3 obligatoriske. Du vælger et format i Argument 3. Der kan vælges flg formater:
- HTML: HTML(*.html)
- Text Files: MS-DOSText(*.txt)
- Microsoft Excel 5-7: MicrosoftExcelBiff5(*.xls)
- Microsoft Excel 97-2002: MicrosoftExcelBiff8(*.xls)
- Rich Text Format: RichTextFormat(*.rtf)
- Snapshot Format: Snapshotformat(*.snp)
Hvis du vil sende billeder i en rapport, skal du benytte Snapshot format. Det krævet at programmet Microsoft Access Snapshot viewer er installeret. Access behøver ikke at være installeret på modtagerens PC. Programmet kan hentes her:
http://www.microsoft.com/downloads/details.aspx?FamilyID=b73df33f-6d74-423d-8274-8b7e6313edfb&displaylang=da
Hvis ikke der vælges et format, bliver du promptet af Access.
Argumenterne 4 - 8 siger sig selv. Hvis du vil have mulighed for at redigere e-mailen inden afsendelse skriver du True. Er der angivet False sendes meddelelsen med det samme.
I 9. argument skriver du stien til og filnavnet på en fil, du vil bruge som skabelon til en .html-fil. Skabelonfilen er en fil, der indeholder HTML-koder.
5. Du er nu klar til at indsætte koden i din kommandoknap. Åbn formularen FRMemail i Designvisning, højreklik på din kommandoknap og vælg nederst Egenskaber. Du får nu en boks der angiver knappens egenskaber. Klik på fanen Hændelser og sæt markøren på linien Vedklik (engelske versioner: OnClick). Tryk nu på de 3 små ... i højre side.
6. Du skal nu have oprettet en variabel, der modtager den valgte e-mailadresse fra formularen. Du skriver følgende:
VARemail = Me.FLDcomboemail
Hvor FLDcomboemail er navnet på den kombinationsboks, du oprettede I formularen. I det øjeblik du hat sat punktum efter det reserverede ord Me, får du en dropdown liste med alle tilgængelige felter i formularen. Du vælger blot det korrekte navn.
Du skal nu have indsat variablen i koden:
DoCmd.SendObject , "", "", VARemail, "", "", "Hej", "Dette er en prøve", False, ""
Da variablen VARemail indeholder modtagerens e-mailadresse, skal du i 4. argument blot skrive VARemail.
7. Din samlede kode skal se således ud:
Dim VARemail As String
VARemail = Me.FLDcomboemail
DoCmd.SendObject , "", "", VARemail, "", "", "Hej", "Dette er en prøve", False, ""
End Sub
Egentlig behøver du ikke anførselstegn mellem de forskellige argumenter hvis de er tomme. Jeg har blot medtaget dem for overskuelighedens skyld. Du kan nøjes med dette:
8. Du er nu klar til at afprøve funktionen. Åbn formularen i formularvisning. Vælg en e-mailadresse (din egen f.eks) i din kombinationsboks og tryk på knappen. E-mailen er nu sendt, og du kan åbne dit Outlook og afvente modtagelsen.
9. Hvis du vil vedhæfte en rapport, skal koden se således ud:
Dim VARemail As String
VARemail = Me.FLDcomboemail
DoCmd.SendObject acReport, "RPTemail", "HTML(*.html)",_
VARemail, "", "", "Hej", "En prøve", False, ""
End Sub
Den eneste forskel er, at der er angivet:
- 1. argument (acReport for Objekttype)
- 2. argument for navnet på objektet (RPTemail)
- 3. argument Outputfotmat (HTML(*html)
10. Bestem modtager, emne og brødtekst med inputboxe
I ovenstående eksempel er du nødt til at åbne din VBA-editor for at ændre argumenterne. Ved at bruge inputboxe, kan du undgå dette, idet Access vil prompte dig for teksten.
11. Tag en ny Kommandoknap fra værktøjskassen og sæt den i Detaljesektionen. Du skal nu have programmeret hvilken handling Access skal udføre, når du trykker på knappen og indsætter flg. kode i knappens VedKlik hændelse:
VARemail = InputBox("Indtast modtagerens e-mail adresse:", "Modtager")
VARemne = InputBox("Indtast emne:","Emne")
VARbrødtekst = InputBox("Indtast tekst:", "Tekst")
DoCmd.SendObject , , , VARemail, , , VARemne, VARbrødtekst, False
Når du trykker på kommandoknappen, vil der for de 3 variabler nu poppe en inputbox med en overskrift op, så du kan indtaste dine parametrer.
Du kan naturligvis lave inputboxe til flere parametrer som f.eks vedhæftet fil m.v.
12. Bestem modtager ved hjælp af en liste
Ofte skal vi sende en e-mail til flere modtagere. Det kan gøres ved hjælp af en liste.
Lav en ny tom formular og tag en Liste fra værktøjskassen. Listen skal være ubundet og skal navngives Liste1. Den kan naturligvis hedde noget andet, men i koderne nedenfor benyttes navnet Liste1. I listens egenskabsark under fanen Data, skal du i egenskaben Rækkekildetype vælge "Tabel/Forespørgsel". I egenskaben Rækkekilde skriver du flg. SQL:
I egenskaben BundetKolonne skriver du 1.
Skift til Fanen Andre, og i Egenskaben FlereMarkeringer vælger du Simpel.
Din liste er nu færdig.
Nu skal vi have lavet nogle TekstBokse, der skal indeholde de tekster, som din e-mail skal sende. Tag 3 ubundne TekstBokse fra Værktøjskassen, og sæt dem i formularens Detaljesektion. Den øverste navngiver du I Egenskabsarkets fane Andre under egenskaben Navn:
Den næste navngiver du på samme måde emne og den sidste navngives indhold.
Nu skal vi have skrevet koderne. Til det brug sætter du en Kommandoknap i Formularfoden. Du kan passende indtaste denne Titeltekst i knappen i Egenskabsarket i fanen Formater under egenskaben Titeltekst:
Overfør valgte poster til adressefeltet.
Skift til fanen Hændelser, sæt markøren på linien Vedklik og tryk på de 3 små ... i højre side. Du kommer nu ind i VBA-Editoren, og markøren står og blinker. Her indsætter du flg. Kode:
Dim txt As String
If Me!Liste1.ItemsSelected.Count > 0 Then
For Each Itm In Me!Liste1.ItemsSelected
txt = txt & Me!Liste1.ItemData(Itm) & "; "
Next Itm
txt = Left(txt, Len(txt) - 2)
End If
Me!email = txt
Når du har valgt (markeret) én eller flere modtagere i Liste1 og du trykker på kommandoknappen, vil de valgte modtagere nu blive overført til adressefeltet.
Men det bliver der ikke sendt nogen e-mail af. Derfor tager du en ny kommandoknap fra værktøjskassen og sætter også den i Formularfoden. En passende tekst i egenskabsarket kan være:
Send e-mail.
I knappens VedKlik hændelsesprocedüre indtaste du flg. Kode:
Dim VARb As String
Dim VARc As String
Vara = Me.email
Varb = Me.emne
VARc = Me.indhold
DoCmd.SendObject , , , Vara, , , Varb, Varc, False
Du kan nu afprøve funktionerne. Vælg én eller flere modtagere i listen, tryk på knappen for at overføre disse til det ubundne felt og tryk herefter på knappen "Send e-mail"
Du kan tilføje et par andre funktioner:
For at fjerne markeringer fra listen, kan du bruge flg kode:
For intList = 0 To Me.Liste1.ListCount - 1
Me.Liste1.Selected(intList) = False
Next intList
Hvis du vil e-maile til alle på listen, kan du med et enkelt museklik markere alle modtagere med denne kode:
For intList = 0 To Me.Liste1.ListCount - 1
Me.Liste1.Selected(intList) = True
Next intList
For at tømme de ubundne Tekstbokse:
Me.emne = Nothing
Me.indhold = Nothing
Linieskift i brødteksten:
Tilføjelse 10 JAN 2010:
13. Vedhæft et Word-dokukent
Hvis du vil vedhæfte f.eks. et Word-dokument til din e-mail, kan du ikke bruge doCmd.SendObject, da denne kun kan afsende databaseobjekter som f.eks. en rapport.
I stedet kan du anvende denne kode, som kræver en reference til OutLook i Access VBA-Editor i menuen Tools > References:
Private Sub Kommandoknap10_Click()
Dim objOl As New Outlook.Application
Dim objPost As MailItem
Dim vedhæftet As Attachments
Set objPost = objOl.CreateItem(olMailItem)
Set vedhæftet = objPost.Attachments
vedhæftet.Add "H:\test\Musik.doc"
With objPost
.Subject = "Dette er en prøve"
.To = "Modtagerens e-mail adresse"
.BCC = ""
.Body = "Hej Med dig!"
.Send
.Save
.Display
End With
objOl.Quit
Set objPost = Nothing
Set vedhæftet = Nothing
Set objOl = Nothing
Exit Sub
End Sub
Koden er taget fra et tidligere spørgsmål i Access, og terry har postet koden i en kommentar til spørgsmålet.


