12. januar 2010 - 10:56Der 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.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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?
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"
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.
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.
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.
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)
Synes godt om
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
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.
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.
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)
Synes godt om
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.
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.
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.
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.
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.