Søger du en specifik kategori?

 



Oprettet søn. d. 10. januar 2010 kl. 19:35

mugs
mugs (150.947 point)
Guidens karaktér
1
2
3
4
5

Send e-mail fra Access.

Denne artikel et rettet mod begyndere i Access. Artiklen viser hvordan du sender elektronisk post fra Access, både ved hjælp af Inputbokse eller ved hjælp af en Liste til flere modtagere samt vedhæftet rapport.
Flg. terminologi er anvendt ved navngivning af objekter:

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:

SELECT [TBLemail].[FLDemail] FROM [TBLemail]


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:

Dim VARemail As String
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:

Private Sub Kommandoknap2_Click()
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:

DoCmd.SendObject , , , VARemail, , , , , False, ""


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:

Private Sub Kommandoknap2_Click()
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:


Dim VARemail As string, VARemne as String, VARbrødtekst as String
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:

SELECT TBLemail.FLDemail FROM TBLemail;


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:

email

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 Itm As Variant
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 VARa As String
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:

Dim intList As Integer
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:

Dim intList As Integer
For intList = 0 To Me.Liste1.ListCount - 1
Me.Liste1.Selected(intList) = True
Next intList


For at tømme de ubundne Tekstbokse:

Me.email = Nothing
Me.emne = Nothing
Me.indhold = Nothing


Linieskift i brødteksten:

"Dette er en brødtekst" & vbnewline & "som fortsætter på næste linie."


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.

Skrevet ons. d. 11. august 2004 kl. 10:13| #1


Skrevet tir. d. 17. august 2004 kl. 21:42| #2

Jeg synes, at det er en god artikel. Mugs har forbedret artiklen væsentligt på flere punkter og slået 2 artikler sammen...og det er der kommet et ganske godt resultat ud af (for begyndere).
Den fortjener klart topkarakter!

Skrevet tir. d. 17. august 2004 kl. 22:07| #3

nih (30.820 point)
Fin artikel for begyndere - Grundig og velskrevet :o)

Skrevet fre. d. 10. september 2004 kl. 10:23| #4

brandy25 (12.130 point)
den er maget godt beskrevet :O)

Skrevet man. d. 04. oktober 2004 kl. 23:35| #5

mandersen (11.255 point)
kanon glæder mig til at prøve den

Skrevet man. d. 08. august 2005 kl. 19:35| #6

sjap (59.331 point)
Kan til fulde tilslutte mig nih's kommentarer. Meget grundig beskrivelse, og jeg tror faktisk også, at jeg "fangede" den.

Skrevet ons. d. 01. august 2007 kl. 09:16| #7

lisette (12.590 point)
Mugs har gjort det igen.....han klarer ærterne hver gang ;-)

Skrevet fre. d. 26. september 2008 kl. 15:49| #8

para7 (5.366 point)
Ser tjekket ud, vil prøve det ved lejlighed..

Skrevet tor. d. 02. oktober 2008 kl. 17:05| #9

jkrons (93.926 point)
En rigtig god artikel. Andet er der ikke at sige :-

Skrevet ons. d. 08. juli 2009 kl. 10:50| #10

claus-a (2.345 point)
Hej mugs.

Når jeg prøver det popper outlook op med en ny mail samtid med jeg får en fejl"SendObjekt handling blev annuleret" og i modtager felt i outlook står VARemail.

Gør jeg noget forkert.
Her er den kode jeg bruger:

Private Sub Form_Timer()
    Dim VARemail As String
    VARemail = Me.FLDcomboemail
    DoCmd.SendObject acReport, "TBLemail", "HTML(*.html)", "VARemail", , , , False
End Sub

Skrevet man. d. 04. januar 2010 kl. 21:31| #11

Christian_Belgien (17.403 point)
mugs, tak for denne guide, den var nyttig.

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 4
17 stemmer
02/02 - 2009
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »
Guidens karakter
!!!Karaktér: 4
25 stemmer
02/02 - 2009
Af: victor-1

Installer Windows XP

Hjælp til installation og opsætning af Windows XP SP3, på en sikker og fornuftig måde...
Guidens karakter
!!!Karaktér: 3
26 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »

Log ind

   

   

Seneste guides

100% højde med CSS i alle browsere
XML
2 Ting du skal holde øje med





Tips & Tricks fra PC World

Teaser billede

Sådan udspionerer du Google

Søgegiganten Google ved uhyggeligt meget om dig. Med Google Alarm får du besked, hver gang der sendes oplysninger om dig til Googles servere.


Anmeldelser fra PC World

Teaser billede

Test: Smart GPS-ur til løb og cykelture

Garmins Forerunner 110 er en meget underholdende makker, uanset om du løber, kører mountainbike i skoven eller drøner rundt på rulleskøjter. Vi har testet det GPS-baserede motions-ur.


Seneste blogindlæg

Teaser billede

Kvittering og status

På Eksperten er der 914.000 spørgsmål. Af dem er 162.000 åbne spørgsmål hvor der ikke er et accepteret svar, selvom der ligger forslag til svar på 63.000 af dem. Mange af dem ligger mange år...


Nyheder fra PC World

Teaser billede

Samsung udfordrer iPad med toptunet Android-tablet

Syv tommer skærm, Googles mobile styresystem og en vægt på 380 gram. Samsung har afsløret detaljerne om Galaxy Tab, der er sydkoreanernes bud på en konkurrent til Apples iPad. Mød tablet-pc'en...


Nyheder fra Computerworld

Teaser billede

Her er de farligste job i teknologi-verdenen

Du risikerer både liv og helbred, hvis du arbejder med disse job i teknologisektoren.



Kurser
Samarbejdspartnere

Udgiver · © 2010 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301