🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Outlook in Excel — E-Mail aus einem Makro senden (und was New Outlook kaputtmacht)

|

VBA Outlook in Excel — E-Mail aus einem Makro senden (und was New Outlook kaputtmacht)

Getestet mit: Excel 365 v2509 · Excel 2021 · Excel 2019 (klassisches Outlook) · zuletzt geprüft am 12.06.2026

Kurzfassung — Mail aus Excel zu senden heißt, das Objektmodell einer anderen Anwendung zu steuern. Zwei Entscheidungen zählen: wie du dich mit Outlook verbindest (Late Binding mit CreateObject ist die portable Wahl) und wie du sendest (.Display, um sicher zu prüfen, .Send, um sofort zu feuern und auf die Sicherheitsabfrage zu treffen). Eines vorweg: „New Outlook" hat die VBA-Unterstützung komplett entfernt — das hier funktioniert nur mit dem klassischen Outlook.

Sub SendeAusExcel()
    Dim olApp As Object, mail As Object
    Set olApp = CreateObject("Outlook.Application")   ' Late Binding — kein Verweis nötig
    Set mail = olApp.CreateItem(0)                    ' 0 = olMailItem

    With mail
        .To = "[email protected]"
        .Subject = "Tagesbericht"
        .Body = "Zahlen im Anhang. — gesendet aus Excel"
        .Attachments.Add ThisWorkbook.FullName
        .Display                                       ' prüfen; .Send feuert sofort
    End With

    Set mail = Nothing
    Set olApp = Nothing
End Sub

Das Denkmodell: Du fernsteuerst eine andere App, du schreibst keinen Excel-Code

Alles andere in deinem Makro spricht mit Excel. Das hier nicht. CreateObject("Outlook.Application") greift in ein separates Programm hinüber und steuert es. Das rahmt jede folgende Frage neu: die Verbindung zu Outlook ist ein anwendungsübergreifender Handshake (Versionsunterschiede zählen also), und Mail zu senden überschreitet eine Sicherheitsgrenze, die Excel seinen eigenen Zellen nie auferlegt (eine Wand aus Zustimmungsabfragen ist also Absicht, kein Bug).

Behalte dieses Bild, und die zwei echten Entscheidungen werden offensichtlich. Erstens, wie bekommst du einen Griff auf Outlook — früh mit Verweis binden oder spät mit CreateObject? Zweitens, wie sendest du tatsächlich — den Entwurf zur Prüfung aufpoppen oder feuern und der Sicherheitsabfrage begegnen? Hast du die zwei richtig, ist der Rest nur .To, .Subject, .Body ausfüllen.

Die eine Regel: Late Binding (CreateObject) reist; Early Binding fesselt dich an einen Rechner

Das ist die Entscheidung, die bestimmt, ob dein Makro überlebt, wenn es an eine Kollegin gemailt wird:

Early Binding braucht einen Verweis (Extras → Verweise → Microsoft Outlook XX.0 Object Library). Du bekommst IntelliSense und benannte Konstanten wie olMailItem — aber die Datei ist nun an genau diese Bibliotheksversion gebunden und wirft „Projekt oder Bibliothek nicht gefunden" auf einem PC mit anderem Outlook. Late Binding (CreateObject("Outlook.Application"), Variablen als Object) hat keinen Verweis, funktioniert versionsübergreifend und ist die richtige Voreinstellung für geteilten Code.

Der Preis des Late Binding ist, dass benannte Konstanten nicht existieren — du nutzt ihre numerischen Werte: CreateItem(0) statt CreateItem(olMailItem). Ein kleiner Preis für Portabilität:

' ✓ LATE BINDING — portabel, kein Verweis, übersteht Versionsunterschiede
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
Dim mail As Object
Set mail = olApp.CreateItem(0)        ' 0 = olMailItem (die Konstante gibt es hier nicht)

' EARLY BINDING (mit Verweis) erlaubte:
'   Dim olApp As Outlook.Application
'   Set mail = olApp.CreateItem(olMailItem)
' ...bricht aber mit „Projekt oder Bibliothek nicht gefunden" auf anderer Outlook-Version.

Nutze Early Binding, während du den Code schreibst — IntelliSense hilft wirklich — und wechsle vor dem Teilen zu Late Binding. (Um eine bestehende Instanz zu finden statt eine neue zu starten, passt GetObject zu CreateObject.)

Die Falle: .Send trifft eine Sicherheitsmauer — .Display ist meist, was du willst

Die zweite Entscheidung ist, wie die Mail rausgeht. .Send verschickt sofort — und auf den meisten Konfigurationen löst das Outlooks Schutz für programmatischen Zugriff aus, die Abfrage „Ein Programm versucht, eine E-Mail in Ihrem Namen zu senden", oder eine glatte Ablehnung per Richtlinie:

.Display     ' ✓ öffnet den Entwurf, ein Mensch prüft und klickt Senden — keine Sicherheitsabfrage
.Send        ' ⚠ feuert sofort; erwarte die Sicherheitsabfrage oder eine Richtlinien-Sperre

.Display umgeht das ganze Problem, indem ein Mensch in der Schleife bleibt: die Mail öffnet sich, vollständig befüllt, und die Person klickt Senden. Für einen „entwirf mir 50 personalisierte Mails zum Durchsehen und Senden"-Ablauf ist das keine Einschränkung — es ist das sicherere Design. Reserviere .Send für vertrauenswürdige, unbeaufsichtigte Automatisierung, und wisse, dass es lautlos zu betreiben heißt, das Sicherheitsmodell zu bedienen (ein vertrauenswürdiger Ort, eine Exchange-Richtlinie oder ein Tool wie Redemption), nicht ein Einzeiler-Fix.

Die Mauer, um die du nicht herumcoden kannst: New Outlook hat kein VBA

Das ist der Teil, den die älteren Tutorials nicht erwähnen, und 2026 das Wichtigste hier:

„New Outlook" — der neu gebaute, webbasierte Client, den Microsoft als Standard ausrollt — unterstützt VBA, COM-Add-Ins und Makros überhaupt nicht. Kein VBA-Editor, kein ThisOutlookSession, kein Outlook.Application zum Automatisieren. Alles in diesem Artikel braucht das klassische Outlook.

Das ist keine Spekulation; es ist Microsofts erklärte Richtung, und der offizielle Ersatz ist Power Automate, kein neueres VBA. Klassisches Outlook läuft heute noch, und CreateObject("Outlook.Application") steuert es weiter — aber du automatisierst nun einen Client, den dein eigener Hersteller zur Ausmusterung markiert hat. Wenn du wählst, wo du investierst, zählt das: ein Makro, das über klassisches Outlook mailt, steht auf Grund, der bereits geräumt wird.

Wann was

Ziel Nimm
Code, den du über PCs teilst Late Binding — CreateObject("Outlook.Application")
Code, den du aktiv schreibst (IntelliSense willst) Early Binding per Verweis, dann vor dem Teilen wechseln
Einen Menschen vor dem Senden prüfen lassen .Display
Unbeaufsichtigt feuern (nur vertrauenswürdige Automatisierung) .Send (erwarte das Sicherheitsmodell)
Die Arbeitsmappe anhängen .Attachments.Add ThisWorkbook.FullName
Auf eingehende Mail reagieren ThisOutlookSession + WithEvents (nur klassisches Outlook)

Die Meinung: Baue 2026 keine neue Automatisierung auf Outlook-VBA

Die Linie, zu der ich mich bekenne: wenn du neu anfängst, verankere deine E-Mail-Automatisierung nicht an Outlook-VBA. Im klassischen Outlook funktioniert es heute, und hast du ein laufendes Makro, lass es laufen. Aber Microsoft war deutlich, dass New Outlook — der Standard für Neuinstallationen — kein VBA hat, und „der Standard" ist, wohin deine Nutzer steuern, ob sie es wählten oder nicht. Brandneue Makros gegen Outlook.Application zu schreiben heißt, auf einem Fundament zu bauen, das der Vermieter bereits zum Abriss ausgeschrieben hat.

Behandle vorhandenes Outlook-VBA also als zu pflegende Altlast, kein Muster zum Erweitern. Brauchst du neue „Excel erreicht die Außenwelt"-Automatisierung — Mail, Zeitpläne, App-übergreifende Bewegungen — wähle etwas, das nicht von einem Prozessmodell abhängt, das Microsoft entfernt. Die paar Minuten, die du für CreateObject und den Kampf mit der Sicherheitsabfrage aufwendest, sind besser in einen Ansatz investiert, den es nach dem New-Outlook-Rollout noch gibt.

Häufige VBA-Outlook-Fehler (und die Lösung)

Symptom Ursache Lösung
„Projekt oder Bibliothek nicht gefunden" auf anderem PC Early Binding an eine bestimmte Outlook-Version gebunden Auf Late Binding wechseln (CreateObject, As Object)
Sicherheitsabfrage bei jedem .Send Der Schutz für programmatischen Zugriff tut seinen Job .Display nutzen, oder das Sicherheitsmodell für .Send bedienen
429 / „Objekt konnte nicht erstellt werden" New Outlook (kein VBA) oder Outlook nicht installiert Braucht klassisches Outlook
olMailItem ist undefiniert Kein Verweis gesetzt (Late Binding) Die Zahl nutzen: CreateItem(0)
Anhang nicht gefunden Arbeitsmappe nie gespeichert, FullName ist nur ein Name Erst speichern; vollen Pfad an Attachments.Add
Outlook bleibt offen / Speicherlecks Objekte nicht freigegeben Set mail = Nothing und Set olApp = Nothing

Wenn die E-Mail-Automatisierung sich stapelt — beschreibe stattdessen die Aufgabe

Du wolltest keine Bindungsmodi und Sicherheitsabfragen studieren. Du wolltest „maile jeder Führungskraft montags die Zahlen ihres Teams". Bis du Late Binding gewählt, die .Send-Mauer mit .Display umgangen und entdeckt hast, dass die Hälfte deiner Nutzer auf New Outlook ist, wo nichts davon läuft, hat die Mechanik den Vormittag gefressen. ExcelMaster Agent lässt dich das Ergebnis in klarem Deutsch beschreiben — „teile dieses Blatt nach Führungskraft und entwirf jeder eine Mail mit ihren Zeilen im Anhang" — und erledigt es, ohne sich auf ein Prozessmodell zu stützen, das Microsoft ausmustert, und sichert vorher deine Arbeitsmappe. Kostenlos testen →

Verwandte Anleitungen

FAQ

Wie sende ich aus Excel eine E-Mail per VBA? Erzeuge ein Outlook-Application-Objekt mit CreateObject("Outlook.Application"), ein Mail-Element mit CreateItem(0), setze .To, .Subject und .Body, dann rufe .Display zum Prüfen oder .Send zum Feuern. Nutze Late Binding (As Object), damit das Makro auf jeder Outlook-Version läuft, und denk daran: das braucht das klassische Outlook.

Was ist der Unterschied zwischen Early und Late Binding bei Outlook? Early Binding braucht einen Verweis auf die Microsoft Outlook Object Library und gibt IntelliSense und Konstanten wie olMailItem, bindet die Datei aber an eine Outlook-Version. Late Binding nutzt CreateObject mit As Object-Variablen — kein Verweis, voll portabel — auf Kosten von Zahlen wie 0 statt olMailItem. Teile Code mit Late Binding.

Warum löst VBA .Send eine Sicherheitswarnung aus? Outlooks Schutz für programmatischen Zugriff zeigt „Ein Programm versucht, eine E-Mail in Ihrem Namen zu senden", um zu verhindern, dass Schadsoftware lautlos mailt. Nutze .Display, damit ein Mensch Senden klickt — das vermeidet die Abfrage ganz. Für unbeaufsichtigtes Senden musst du das Sicherheitsmodell bedienen — ein vertrauenswürdiger Ort, eine Exchange-Richtlinie oder ein Tool wie Redemption.

Funktioniert VBA in New Outlook? Nein. New Outlook — der webbasierte Client, den Microsoft zum Standard macht — hat kein VBA, keine COM-Add-Ins und keine Makro-Unterstützung. CreateObject("Outlook.Application") steuert nur das klassische Outlook. Microsofts empfohlener Ersatz für die Automatisierung ist Power Automate.

Wie hänge ich in VBA eine Datei an eine Outlook-Mail? Nutze .Attachments.Add mit vollem Pfad: .Attachments.Add ThisWorkbook.FullName hängt die aktuelle Arbeitsmappe an. Speichere die Mappe zuerst, sonst liefert FullName nur den Dateinamen ohne Pfad und der Anhang wird nicht gefunden.