Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Mail versenden mit Docmd.SendObject

Begonnen von zoulhh, September 23, 2016, 14:52:42

⏪ vorheriges - nächstes ⏩

zoulhh

Hallo zusammen,

ich möchte aus einem Formular heraus Mails versenden. Auf dem betreffenden Rechner ist Office 2013 (64-Bit) installiert, nicht aber Access. Access steht nur als Runtime zur Verfügung. Das soll auch so sein.

Wenn ich die Mail nun absende, öffnet sich eine Outlook - Mail und alles ist super. Ich kann dann auf "Senden" klicken und die Mail geht raus.

Das funktioniert aber nur solange, wie Outlook auf dem betreffenden Rechner nicht gestartet ist. Wenn Outlook läuft gibt es die Fehlermeldung:

Auf die Datei C:\users\blablabla\username@domaene.ost kann nicht zugegriffen werden. Sie wird von einem anderen Prozess verwendet.

Ich kann die Office Version nicht ändern. Tipps diesbezüglich helfen mir also leider nicht.

Ich freue mich über Lösungsvorschläge und sage vielen Dank im voraus.



datekk

Also ich arbeite ganz toll mit dieser Funktion. Kopiere folgenden Code in ein neues Modul.


Public Function CreateEmailWithOutlook(strMessageTo As String, strSubject As String, strMessageBody As String)

    ' Define app variable and get Outlook using the "New" keyword
    Dim olApp As New Outlook.Application
    Dim olMail As Outlook.MailItem  ' An Outlook Mail item

    ' Create a new email object
    Set olMail = olApp.CreateItem(olMailItem)

    ' Add the To/Subject/Body to the message and display the message
    With olMail
        .To = strMessageTo
        .Subject = strSubject
        .HTMLBody = strMessageBody
        .Display    ' To show the email message to the user
    End With

    ' Release all object variables
    Set olMail = Nothing
    Set olApp = Nothing


End Function




Also dann z.B. beim Klick - Ereignis einer Schaltfläche diesen Code nutzen:


CreateEmailWithOutlook "mail@mail.de", "Betreff", "Nachrichtentext"


Im VBA Editor Verweis auf die "Microsoft Outlook 1x Object Library" setzen.

Funktioniert bei mir super. Viel Erfolg.
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

zoulhh

Hi,

ich bin jetzt nicht so der VBA Profi und bekomme den Fehler:

Dim olApp As New Outlook.Application

Benutzerdefinierter Typ nicht definiert.


datekk

Hast Du den Verweis auf die Library gesetzt? Im VBA Editor oben im Menü auf Extras / Verweise.. Dort den genannten Verweis anklicken. Er müsste "Microsoft Outlook 15.0 Object Library" heißen.

Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

zoulhh


zoulhh

Moment. Hab ich doch nicht. Ich teste noch mal... Sorry.

zoulhh

Zitat von: datekk am September 23, 2016, 15:36:35
Hast Du den Verweis auf die Library gesetzt? Im VBA Editor oben im Menü auf Extras / Verweise.. Dort den genannten Verweis anklicken. Er müsste "Microsoft Outlook 15.0 Object Library" heißen.

Ok, das läuft hier. Ich kann es aber an den problematischen Rechner erst morgen testen. Vielen Dank erst einmal!

Geht damit auch CC und BCC?

Danke.

datekk

#7
Hi. Also das geht natürlich auch an CC und BCC Empfänger. Dazu musst Du "nur" im With Block der Funktion die Positionen .BCC und .CC mit einer Variablen versehen.


    With olMail
        .To = strMessageTo
        .CC = strMessageCC
        .CC = strMessageBCC
        .Subject = strSubject
        .HTMLBody = strMessageBody
        .Display    ' To show the email message to the user
    End With


Diese Variable musst Du dann im Funktionskopf festlegen und deklarieren.

Public Function CreateEmailWithOutlook(strMessageTo As String, strMessageCC as String, strMessageBCC as String, strSubject As String, strMessageBody As String)


Dann müssen natürlich beim Aufruf der Funktion auch die entsprechenden Parameter an die Funktion übermittelt werden...


CreateEmailWithOutlook "anmail@mail.de", "ccmail@mail.de", bccmail@mail.de", "Betreff", "Nachrichtentext"



Du hattest mich ja auch noch angefragt, ob man das tatsächliche senden der Mail im Access nachvollziehen kann. Das weiß ich leider nicht. Aber man könnte es so einrichten, dass die Mail gar nicht angezeigt wird sondern gleich gesendet...

Das ginge indem Du oben im Code das .Display durch .send tauschst.

Ist der Inhalt immer gleich? Ggf. kann man hier ja was automatisieren...
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

zoulhh

Zitat von: datekk am September 23, 2016, 18:07:46

Du hattest mich ja auch noch angefragt, ob man das tatsächliche senden der Mail im Access nachvollziehen kann. Das weiß ich leider nicht. Aber man könnte es so einrichten, dass die Mail gar nicht angezeigt wird sondern gleich gesendet...

Das ginge indem Du oben im Code das .Display durch .send tauschst.

Ist der Inhalt immer gleich? Ggf. kann man hier ja was automatisieren...

Hi danke nochmals. Das mit BCC und CC klappt auch super. Nein. Den Inhalt generiere ich. Das mit dem Send ist vielleicht eine gute Idee. Dann bastel ich mir mein eigenes Display und zeige es bevor gesendet werden kann. Im Grunde super.

Ich hoffe, dass diese Art und Weise des Mailversand auch das blöde .ost Problem löst. Das kann ich aber erst später prüfen.

Danke!

datekk

Genau... Bastel ein eigenes Formular welches ein großes Textfeld beinhaltet. Hier kann der Text eingegeben werden - und baue einen Senden Button. Das ist doch ne tolle Lösung. :)
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

zoulhh

Hmm. Nee. Wenn ich .send statt .display benutze meckert Outlook, dass die Anwendung heimlich Mail versenden will und der Benutzer muss jedesmal zustimmen (wenn er den Button im Hintergrund überhaupt sieht). Auch nicht das Wahre...