Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Outlook.Mail / Exchange Setting

Forumthread: VBA Outlook.Mail / Exchange Setting

VBA Outlook.Mail / Exchange Setting
03.07.2023 15:59:15
Klaus

Hallo,
ich habe ein Problem.
Wir haben MS Exchange 2016. Bisher konnte ich mit dem folgenden VBA Code, auch E-Mails beantworten die in einem Shared Postfach waren.
Heute wurde gearbeitet und ich kann nur noch aus meinem persönlichen Postfach E-Mails senden.
Da ich unserem Admin letztens schonmal mit einem Setting in Exchange auf die sprünge helfen musste, kennt jemand zuffälig den Exchange Befehl wie man die Kommunikation mittels VBA im Shared Postfach wieder ermöglichen kann?

Danke Euch

LineReplyMail:
    
    ''_______________Send REPLY MAIL WITH SIGNATURE______________

    Dim OutlookApp As Object
    Dim OutlookMail As Object
    
'''    On Error GoTo LineKeineMail
    On Error Resume Next
    Set OutlookApp = CreateObject("Outlook.Application")
    On Error Resume Next
    Set OutlookMail = OutlookApp.ActiveExplorer.Selection.Item(1)
    OutlookMail.Categories = sUserSetFlag   'setzt Kategorie auf sUserSetFlag User, User muss in den Kategorien vorhanden sein
    OutlookMail.FlagStatus = 1              'Hakt die Mail als erledigt ab
    OutlookMail.UnRead = False              'markiert die Mail als gelesen
    OutlookMail.Save                        'Better Safe often
    
    On Error GoTo LineKeineMail
    '~~> Get MailItem.GetConversation method (Outlook)
' https://learn.microsoft.com/en-us/office/vba/api/outlook.mailitem.getconversation

    Dim OutlookConversation As Object
    Set OutlookConversation = OutlookMail.GetConversation

    On Error GoTo LineKeineMail
    '~~> Conversation.GetTable method (Outlook)
' https://learn.microsoft.com/en-us/office/vba/api/outlook.conversation.gettable

    Dim OutlookTable As Object
    Set OutlookTable = OutlookConversation.GetTable
    
    On Error GoTo LineKeineMail
    '~~> Obtains a 2D array from the Table.
' https://learn.microsoft.com/en-us/office/vba/api/outlook.table.getarray

    Dim OutlookAr As Variant
    OutlookAr = OutlookTable.GetArray(OutlookTable.GetRowCount)
    
    On Error GoTo LineKeineMail
    Dim OutlookReplyToThisMail As Object
    Set OutlookReplyToThisMail = OutlookMail.Session.GetItemFromID(OutlookAr(UBound(OutlookAr), 0))

    On Error GoTo LineKeineMail
    With OutlookReplyToThisMail.Reply
        .SentOnBehalfOfName = "Mail@Test.de"
        .ReplyRecipients
        .CC = sKMail
        .Subject = sTitle
        .BodyFormat = 2
        .HTMLBody = sText & .HTMLBody
        .Display
        If sBox = "ini_PVHAKTausch" Then
        .Attachments.Add sAttachment
        End If
        If sBox = "ini_PVHAKUNVOLLST" Then
        .Attachments.Add sAttachment
        End If
        If sSendwithDelay = "JA" Then
        .DeferredDeliveryTime = sSetDateDelayed & sSetTimeDelayed
        End If
    End With
    
    GoTo LineCreateTimestamp


    ''^^^^^^^^^_______________Send REPLY MAIL WITH SIGNATURE______________^^^^^^^^^


Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Outlook.Mail / Exchange Setting
03.07.2023 16:16:20
Oberschlumpf
Hi Klaus

a) ich weiß keine VBA-Lösung zur gewünschten Verwendung von Exchange

b) wüsste ich eine, würde ich sie dir wahrscheinlich trotzdem nicht verraten, weil ich ja gar nicht weiß - ob denn die jetzt aktivierte Änderung, nur noch vom eigenen Postfach versenden zu können - vielleicht auch ganz genau so gewollt ist...so von wegen "transparenter Versand"

Ich weiß nicht mal, wäre ich an deiner Stelle, ob dann (auch) ich versuchen würde, alles wieder so "einzurichten" wie es vorher war.

Ich würde vielleicht euren ExchangeAdmin mal ansprechen und fragen, was da geht - ja, ich weiß, du kennst dich da teilweise besser aus als er....aber er weiß vielleicht besser, ob ihr das noch dürft, was du wieder erreichen möchtest.

Ja, ich weiß auch, mein Beitrag ist nicht wirklich ein Code-beinhalteter-Lösungsvorschlag, und deswegen hab ich den Beitrag weiterhin als offen definiert.
Aber vielleicht hilft ja mein Beitrag, dich ein wenig "anzustubsen" mal darüber nachzudenken, was ich geschrieben habe.

Ciao
Thorsten

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

VBA Outlook.Mail und Exchange Einstellungen optimieren


Schritt-für-Schritt-Anleitung

Um E-Mails mit VBA über Outlook zu versenden, insbesondere aus einem Shared Postfach, kannst Du den folgenden Code verwenden. Dieser Code zeigt, wie Du ein MailItem über VBA erstellen und versenden kannst:

Sub SendMail()
    Dim OutlookApp As Object
    Dim OutlookMail As Object

    Set OutlookApp = CreateObject("Outlook.Application")
    Set OutlookMail = OutlookApp.CreateItem(0) ' 0 = olMailItem

    With OutlookMail
        .To = "empfaenger@example.com"
        .Subject = "Betreff der E-Mail"
        .Body = "Inhalt der E-Mail"
        .SentOnBehalfOfName = "Mail@Test.de" ' Für Shared Postfach
        .Attachments.Add "C:\Pfad\zu\deinem\Anhang.pdf" ' Optional
        .Display ' Zum Anzeigen der E-Mail
        '.Send ' Um die E-Mail sofort zu senden
    End With
End Sub

Wenn Du ein einzelnes Tabellenblatt per Mail versenden möchtest, kannst Du das Blatt als PDF speichern und dann als Anhang hinzufügen:

Sub SendSheetAsPDF()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("DeinTabellenblatt")

    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Pfad\zu\deinem\Export.pdf"

    Dim OutlookApp As Object
    Dim OutlookMail As Object

    Set OutlookApp = CreateObject("Outlook.Application")
    Set OutlookMail = OutlookApp.CreateItem(0)

    With OutlookMail
        .To = "empfaenger@example.com"
        .Subject = "Betreff der E-Mail"
        .Body = "Hier ist das angeforderte Tabellenblatt im Anhang."
        .Attachments.Add "C:\Pfad\zu\deinem\Export.pdf"
        .Display
    End With
End Sub

Häufige Fehler und Lösungen

  1. Fehler beim Senden aus dem Shared Postfach
    Wenn Du keine E-Mails mehr aus einem Shared Postfach senden kannst, könnte dies an den Exchange-Einstellungen liegen. Kontaktiere Deinen Exchange-Administrator, um sicherzustellen, dass die Berechtigungen korrekt gesetzt sind.

  2. Outlook-Anwendung nicht gestartet
    Wenn der VBA-Code nicht funktioniert, überprüfe, ob Outlook korrekt geöffnet ist. Der Code benötigt eine aktive Outlook-Sitzung.

  3. Dateipfad für Anhänge
    Achte darauf, dass der Pfad zum Anhang korrekt ist. Ein ungültiger Pfad führt zu einem Laufzeitfehler.


Alternative Methoden

Anstelle von VBA kannst Du auch Power Automate (ehemals Microsoft Flow) verwenden, um E-Mails automatisch zu versenden. Dies kann besonders nützlich sein, wenn Du regelmäßig Excel-Daten versenden möchtest, ohne VBA zu verwenden.


Praktische Beispiele

  • Einzelnes Tabellenblatt als PDF versenden:
    Verwende den oben angegebenen Code, um einfach ein Tabellenblatt als PDF zu exportieren und per E-Mail zu versenden.

  • E-Mail mit mehreren Anhängen:
    Um mehrere Dateien anzuhängen, kannst Du die Attachments.Add-Methode mehrmals verwenden:

.Attachments.Add "C:\Pfad\zu\deinem\Anhang1.pdf"
.Attachments.Add "C:\Pfad\zu\deinem\Anhang2.jpg"

Tipps für Profis

  • Überprüfe die Sicherheitsoptionen in Outlook, um sicherzustellen, dass Makros und automatisierte E-Mails erlaubt sind.
  • Verwende Fehlerbehandlung in Deinem VBA-Code, um Laufzeitfehler zu vermeiden. Beispiel:
On Error GoTo ErrorHandler
' Dein Code hier
Exit Sub
ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Denke daran, beim Versenden von E-Mails mit Anhang die Größe der Anhänge im Auge zu behalten, um Probleme beim Versand zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich E-Mails im Hintergrund senden?
Ja, wenn Du die .Display-Methode durch .Send ersetzt, wird die E-Mail im Hintergrund gesendet, ohne dass sie angezeigt wird.

2. Wie kann ich E-Mails an mehrere Empfänger senden?
Du kannst die Empfänger in der .To-Eigenschaft durch ein Semikolon getrennt auflisten:

.To = "empfaenger1@example.com; empfaenger2@example.com"

3. Wie sende ich E-Mails mit einer Verzögerung?
Verwende die DeferredDeliveryTime-Eigenschaft, um den Versandzeitpunkt festzulegen:

.DeferredDeliveryTime = Now + TimeValue("01:00:00") ' 1 Stunde Verzögerung

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige