12. januar 2010 - 10:56 Der er 20 kommentarer og
1 løsning

Email med word attachment fra Access

Jeg stillede spoergsmaalet http://www.eksperten.dk/spm/897743#reply_7521181 hvordan man fra Access kunne sende emails med et word dokument som attachment.  Svaret (som kom fra Terry) var at jeg skulle tilfoeje Access databasen en reference til Outlook og saa bruge en funktion som jeg har indsat saaledes i onclick eventen for en knap:

Dim objPost As MailItem
Dim brief As Attachments
Set objPost = objOL.CreateItem(olMailItem)
Set brief = objPost.Attachments
brief.Add "C:\FebSjabloon"
With objPost
  .Subject = "Dette er en prøve"
  .To = "christian.jorgensen@skynet.be"
  .BCC = ""
  .Body = "Hej Med dig!"
  .Display
  End With
objOL.Quit
Set objPost = Nothing
Set vedhæftet = Nothing
Set objOL = Nothing
Exit Sub

End Sub

Den har jeg afproevet og den virker efter hensigten.  Jeg har kombineret den med kode jeg snuppede fra mugs' guide http://www.eksperten.dk/guide/371 saaledes at kan sende til en liste af emails (som jeg vaelger fra bestaaende tabeller) og jeg kan indsaette url til attachmentet, emne, o.s.v. ved hjaelp af textboxes saa brugeren ikke behoever at gaa ind i VBAen.  Saa langt er alt godt.

Men nu sidder jeg paa det velfaerdscenter hvor jeg som frivillig medarbejder idag skulle have sendt et nyhedsbrev ud.  Men jeg faar en fejlmelding (paa hollandsk) "AxtiveX-onderdeel kan geen object maken" som jeg oversaetter til AxtiveX-part kan ikke lave et objekt.  I koden bliver denne linie farvet gul:

Set objPost = objOL.CreateItem(olMailItem)

Jeg har flueben i de foelgende libraries: Visual Basic For Applications, Microsoft Access 12.0 Object Library, OLE Automation, Microsoft ActiveX Data Objects 2.1 Library, Microsft Outlook 12.0 Object Library.  Jeg ledte efter et AxtiveX library (fordi fejlmeldingen naevner AxtiveX) men der er intet.

Saa her er et noedraab i haab o, at nogen kan hjaelpe med en loesning.
12. januar 2010 - 11:27 #1
Jeg maa hellere klargoere at jeg her kun bruger ovenstaaende kode og ikke listerne og tekstboxene, saa der kan ikke komme problemer derfra.
Avatar billede terry Ekspert
12. januar 2010 - 11:36 #2
So your not on the same PC as before?

Are any references (MISSING)?
Avatar billede terry Ekspert
12. januar 2010 - 11:43 #3
If Outlook isnt installed or its is an older version then you need to install it or select the current version in references.

But I would expect to see MISSING beside the reference you have
12. januar 2010 - 12:22 #4
I am at a different PC than before.  Outlook 2007 is installed.  On Access I see no mention of references MISSING.
Avatar billede terry Ekspert
12. januar 2010 - 12:48 #5
Strange

Try compiling the dB to see if you get an error

(Debug + Compile menu)
12. januar 2010 - 13:23 #6
I have two problems (1) i am using Access 2007 thus without the usual menus, and (2) it is a Dutch language version so things re called differently.  Some reverse engineering: When I try to run the program and I get the errormessage there are two buttons on, one called beeindigen which means stop and one called foutopsporing.  That last word is probably what is debug in English.  Then in VBA there is a menu item foutopsporing.  There I only have the usual debugging options step over, step out, add breakpoint, and so on, nothing that could mean compile.  Where else should I look for compile?
12. januar 2010 - 13:30 #7
In my searching around I pressed help and searched for compile.  The only thing I got was a definition:  "compileertijd (compile time)" followed by text that says that this i the moment when source code is transformed into executive code.  Thus, compile is called compijle in Dutch.  But I have found no options anywhere to "compijle"
Avatar billede terry Ekspert
12. januar 2010 - 14:00 #8
I'm also using Access 2007 (English) Compile will be in the same menu as your debug (Step over, into etc.) Very likley the one at the top. You can also Customize the menu (Right click and choose Customize or what ever it is in Dutch) Now you should be able to find Compile project.


I'm rather puzzled as to why you get an error althogh Outlook is installed.
12. januar 2010 - 14:36 #9
Thank you for your patince.  I now found under foutopporing, on top as you said, an option Vrijwilliges Kauwenberg compileren, but it is grayed out.  When I rightclick one of the options I get is "aanpassen" which must be customize.  When I press it I can chose foutopsporing and having done so I get the list of "opdrachten" of which the first one is Project compileren.  When I select it it gets a yellow background but nothing happens.  There are three buttons, one is change choice (my translation) the next is Opdrachten opnieuw schikken which means rearrange the tasks, and the last is Close.  I have tried to play around with opdrachten opnieuw schikken, but I got no result, the compile option is still grayed out.
Avatar billede terry Ekspert
12. januar 2010 - 16:27 #10
Try altering some code, this normally makes the Compile available again. If it doenst then I'm lost.
12. januar 2010 - 19:23 #11
I ran out of time, had to dash to get the train.  I am going back thursday.  I plan for a dual approach:  (1) tomorrow I shall study how best to bring the email addresses that are in the database over to outlook and create a group so that I can in any event get the newsletter out, and (2)try to find out how to do it from Access, if not for now then for the future.

I just opened a database here on my own laptop.  The compile option is direct available.  I clicked on it and saw nothing happening.  This probably means that it compiled quietly and quickly and without problems.

So there are two unusual things: the database cannot create an outlook object and the database will not allow compilation.  I wonder if there is a common cause, some kind of defect with this database.  I wonder what could be the sort things that in an Access database would block the compile option.  Maybe I should, on Thursday, start over with a new database with just a single table with a few email addresses and see if that will behave.  It is worth a try. 

I shall in any event Thursday follow your advice, change some code and try to compile and then post here what happens.  Thanks for all your time today.
Avatar billede terry Ekspert
12. januar 2010 - 19:53 #12
You can try changing your code but I must admit I dont think it will help.

Function SendMail()
Dim objOl As Object
Dim objPost As Object
Dim vedhæftet As Object
   

    Set objOl = CreateObject("Outlook.Application")
    Set objPost = objOl.CreateItem(olMailItem)
Avatar billede Slettet bruger
12. januar 2010 - 21:22 #13
Det er muligt at håndtere referencer programmatically - følgender lister på guid:

Function showReferences()
    Dim r As Reference
    For Each r In References
        With r
            If Not .BuiltIn Then
                If .Kind Then
                    Debug.Print .FullPath
                Else
                    Debug.Print """" & .Guid & """, " & .Major; "" _
                        & "," & .Minor: End If: End If: End With: Next
End Function

følgende sætter en reference vha. den guid:

References.AddFromGuid "{00020430-0000-0000-C000-000000000046}", 2, 0

Man kan også sættes vha path - men det IMO dårligt ('C:\Programmer\Fælles filer\Microsoft Shared' hedder helt sikkert noget andet på engelsk og noget tredje på hollandsk)

Det er altså muligt at lave nogle rutiner der tester om access databaseprogrammet har de rette referencer, og prøver at sætte disse, hvis de er registreret (ligger i registry) på computeren.
12. januar 2010 - 22:29 #14
ellebe, det er adskillige tommer over mit niveau.

Lad mig lige, for min egen forstaaelse, skitse op: 

(1) En organisation har i en Access 2007 database, blandt andet, email adresser for et antal mennesker.  Jeg skal nu assistere denne organisation med at sende nyhedsbreve til de mennesker, og min ambition er at sende nyhedsbrevet direkte fra databasen i stedet for at overfoere email adresserne til outlook.  Jeg har paa min egen laptop med et kopi af databasen testet Terry's kode der indebaerer at inkludere i databasen en reference til outlook og saa skabe en mailitem med en url til nyhedsbrevet.  Naar jeg koerer testen med to email adresser, min egen og en ven's, saa faar vi en email med det rigtige word dokument.

(2) Da jeg saa idag paa organisationen's pc med deres database ville koere den samme kode saa syntes jeg ikke at have problemer med at indsaette outlook referencen i databasen (i tools -> referencer kunne jeg placere fluebenet, da jeg saa skrev koden virkede auto-complete saaledes at naar jeg begyndte at skrive outlook saa dukkede resten af ordet op og ogsaa med mailitem og andre ord.  Derfor skoennede jeg at det var lykkedes mig at indsaette referencen til outlook i access databasen.

(3) Ikke desto mindre da jeg proevede at koere koden (klikkede paa den knap hvis on_click event skulle saette koden igang) fik jeg en fejl at ActiveX (eller AxtiveX) ikke kunne lave object og den linie i koden der fejlede var denne:  Set objPost = objOL.CreateItem(olMailItem)

Hvor kommer saa dit indlaeg ind?  Er dit raad i stedet for at tilfoeje outlook referencen ved at placere et flueben saa at tilfoeje den programmatisk?  Eller siger du at maaske er referencen, trods fluebenet og autocomplete, i virkeligheden ikke tilfoejet rigtigt (i registry) og det kan jeg teste programmatisk?

Nu hvor jeg gennemlaeser ovenstaaende bliver jeg bange for at det kan opfattes ironisk eller saadan noget, men det er ikke min mening.  Jeg vil vaere taknemmelig hvis du vil skaere det lidt mere ud i pap (glanspapir ville vaere endnu bedre) hvad du foreslaar jeg skal goere for at kunne sende email med word attachment fra min organisation's access database.
Avatar billede terry Ekspert
12. januar 2010 - 22:48 #15
By changing the code as mentioned there is no need to worry about references as long as Outlook is installed.
This also gets around the problem of different versions of Outlook.
So you can actually remove the reference to Outlook if you change the code.


But as I mentioned previously I dont think it will help, if there is a reference which is OK then the code should work.

Function SendMail()
Dim objOl As Object
Dim objPost As Object
Dim vedhæftet As Object
   

    Set objOl = CreateObject("Outlook.Application")
    Set objPost = objOl.CreateItem(olMailItem)
Avatar billede Slettet bruger
13. januar 2010 - 02:13 #16
svar på  #14

Jeg beretter om noget jeg synes belyser problemet med at en access database-program som er udviklet på et system ikke nødvendigvis har de rette referencer på et andet system.
Det er ikke noget færdigt, som kan putte ind - blot noget jeg måske ville ekspermintere med hvis jeg havde problemet.

Koden viser to anvendelsen af objektet 'Reference' - det handler om  at gøre det, programafviklings mæssigt, som man manuelt gør ved at afkryse flueben i vba-editoren->menulinien-tools-references.

Det kan evt. bruges til at lave noget 'auto installation', når et database-program flyttes til en anden computer.

Der ligger ikke noget polemisk eller personligt rettet - jeg forholder mig til en detalje omkring emnet: virker ikke mod outlook på anden computer, uden at at gå i detaljer.

Jeg beklager, hvis du synes jeg svarer ude af kontekt.

Dialogerne her er også et søgebart vidensarkiv, og andre læser med og kunne måske tænke: 'ah - der findes et objekt til programmæssigt' at håndterer referencer - stærkt!'

Jeg stødte på eksperten fordi trafikken på det mere fri forum: usenet er ved at dø ud.

Det er en udmærket løsning Terry foreslår i #15 - så derfor vil jeg ikke uddybe mere i dette svar.
13. januar 2010 - 07:45 #17
Ellebe, for at runde denne sidetraad af, ja, jeg kan godt se at #14 kan opfattes polemisk.  Det var ikke min mening.  Jeg soegte blot i dit indlaeg efter konkret hjaelp til mit problem hvortil du svarer at dit indlaeg var ment som et mere generelt alternativ til den slags problemer.  Engang naar (hvis) min niveau er paa det rette plan vil jeg maaske eksperimentere.
13. januar 2010 - 15:56 #18
Strategi.

Tak for at have tolereret denne saga saa laenge.  Jeg skifter nu strategi for at faa den foerste runde af nyhedsbrevet ud:  Jeg vil overfoere email adresserne fra Access til Outlook og der, ved hjaelp af en distributions-gruppe, sende emailene med word dokumentet som attachment.  (Terry, I know that you suggested something like this earlier, but I was probably too preoccupied with my own plans to appreciate it.) 

Jeg har brugt en stor del af dagen med tutorials for Outlook (som har vaeret et lukket land bortset fra simpel email sende og modtage, ja indtil for nylig brugte jeg Outlook Express.) 

(1) Jeg fandt ud af at lave en distributions gruppe Kauwenberg (navnet paa centeret jeg arbejder for). 
(2) Saa fandt jeg file->import/eksport ->data fra et andet program/fil importere ->Microsoft Access 97-2003.  Jeg fandt ingen mulighed for at importere fra Access 2007, og heller ingen mulighed for at importere fra en enkel tabel eller query.
(3) Jeg lavede derfor en kopi af databasen, bevarede den i Access 2003 format (filekstension mdb), slettede alle objekter undtagen tabellen der indeholdt navn, efternavn, og emailadresse og i den tabel slettede jeg alle raekker der ikke havde emailadresse.
(4) Fra Outlook importerede jeg saa den database i Outlook mappen Kontaktperson og linkede Access's navn, fornavn, og emailadresse til Outlook's navn, fornavn, og emailadresse.  Jeg fik derved skabt kontaktpersoner.
(5) Saa aabnede jeg Kauwenberg gruppen, og ved at trykke paa Vaelge Medlemmer og selecte alle kontaktpersonerne fik jeg dem indsat i Kauwenberg gruppen.
(6) Saa lavede jeg en ny email, vedhaeftede nyhedsbrevet, klikkede paa Bcc og indsaette der Kauwengerg gruppen og sendte emailen (den medlemsliste jeg sendte til bestod kun af min egen email adresse og den fra en indviet ven.)  Og det gik fint. (Med vilje lavede jeg ingen To adresse for at se om det var noedvendigt; det var det aabenbart ikke.)

Saa nu haaber jeg det virker i morgen.  Hvis ikke, saa er min sidste chance simpelthen copy-paste af email adresserne en for en, men det haaber jeg at undgaa.

Saa vil jeg have tid til at eksperimentere videre med at sende direkte fra Access hvilket, hvis jeg kan faa det til at virke, stadig synes mig en langt mere attraktiv loesning.

Hvis der er kommentarer (hvis i ikke for laenge siden er staaet af) modtages de gerne.
13. januar 2010 - 15:59 #19
Og jeg lukker dette spoergsmaal.  Hvis jeg, hvad der er sandsynligt, skulle faa brug for yderligere hjaelp er det bedre at aabne et nyt frisk spoergsmaal.  Terry please make an answer, it is time I get some points in your direction.
Avatar billede terry Ekspert
13. januar 2010 - 16:24 #20
here it comes then.
Drop a comment if you think we can be of help.

P.S.

I'm a little lost when you start mentioning Access 2003 though
Avatar billede terry Ekspert
13. januar 2010 - 17:25 #21
Thanks
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