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

VBA Fehler bei Zuweisung von Outlook

Forumthread: VBA Fehler bei Zuweisung von Outlook

VBA Fehler bei Zuweisung von Outlook
05.12.2025 12:37:04
MarcoR
Hallo zusammen
Bei meinem aktuellen Projekt habe ich einen VBA Code eingefügt, der einen bestimmten Bereich in der Tabelle auf Knopfdruck in eine PDF umwandelt, zu Outlook sendet, sich dabei den Betreff und die vorhande Email Adresse nimmt und im Outlook einfügt, dass ich nur noch auf senden drücken muss.
Alles funktioniert perfekt wie ich es möchte, jedoch öffnet er bei mir immer das Outlook (Classic), wir haben aber eine neuere Version, die wir täglich nutzen. Ich finde diese auch bei den installierten Apps, aber leider macht er mir die nicht auf.
Liegt der Fehler manchmal im Code?

Userbild

Hier noch der Code:
Option Explicit

' === Konfiguration: Diese Zellen/Blatt an deine Datei anpassen ===
Private Const SHEET_NAME As String = "Layout" ' Leer = ActiveSheet nutzen; sonst z. B. "Bericht"
Private Const EMAIL_CELL As String = "C12" ' Zelle mit E-Mail-Adresse
Private Const SUBJECT_CELL As String = "C13" ' Zelle mit Betreff
Private Const OPEN_MAIL_FOR_REVIEW As Boolean = True ' True = E-Mail anzeigen; False = sofort senden

Public Sub DruckbereichAlsPDF_Senden()
On Error GoTo ErrHandler

Dim ws As Worksheet
If SHEET_NAME = "" Then
Set ws = ActiveSheet
Else
Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
End If

' --- Eingaben aus Tabelle lesen ---
Dim recipient As String
Dim mailSubject As String

recipient = Trim(ws.Range(EMAIL_CELL).Value)
mailSubject = Trim(ws.Range(SUBJECT_CELL).Value)

If Len(recipient) = 0 Then
MsgBox "In Zelle " & EMAIL_CELL & " wurde keine E-Mail-Adresse gefunden.", vbExclamation, "Fehlende E-Mail"
Exit Sub
End If
If Len(mailSubject) = 0 Then
MsgBox "In Zelle " & SUBJECT_CELL & " wurde kein Betreff gefunden.", vbExclamation, "Fehlender Betreff"
Exit Sub
End If

' --- Druckbereich prüfen ---
Dim printArea As String
printArea = ws.PageSetup.printArea
If Len(printArea) = 0 Then
MsgBox "Es ist kein Druckbereich für das Blatt '" & ws.Name & "' definiert." & vbCrLf & _
"Bitte einen Druckbereich setzen (Seitenlayout ? Druckbereich).", vbExclamation, "Kein Druckbereich"
Exit Sub
End If

' --- PDF-Datei im Temp-Ordner erstellen ---
Dim tempPath As String, pdfName As String, pdfFullPath As String
tempPath = Environ$("TEMP")
If Right$(tempPath, 1) > "\" Then tempPath = tempPath & "\"

' Dateiname: Blattname_BenutzerDatumZeit.pdf (ohne unzulässige Zeichen)
pdfName = CleanFileName(ws.Name & "_" & Format(Now, "yyyymmdd_HHMMSS") & ".pdf")
pdfFullPath = tempPath & pdfName

' Nur den Druckbereich exportieren
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=pdfFullPath, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

' --- Outlook-Mail erstellen (Late Binding) ---
Dim olApp As Object, olMail As Object
Dim createdOutlook As Boolean

On Error Resume Next
Set olApp = GetObject(Class:="outlook.Application")
If olApp Is Nothing Then
Set olApp = CreateObject("outlook.Application")
createdOutlook = True
End If
On Error GoTo ErrHandler

If olApp Is Nothing Then
MsgBox "Outlook konnte nicht gestartet werden.", vbCritical, "Outlook-Fehler"
GoTo Cleanup
End If

' 0 = olMailItem (Late Binding, keine Enum verfügbar)
Set olMail = olApp.CreateItem(0)
With olMail
.To = recipient
.Subject = mailSubject
.Body = "Guten Tag," & vbCrLf & vbCrLf & _
"anbei der aktuelle Bericht als PDF." & vbCrLf & vbCrLf & _
"Beste Grüße" & vbCrLf & Application.UserName
.Attachments.Add pdfFullPath

If OPEN_MAIL_FOR_REVIEW Then
.Display ' E-Mail zur Prüfung anzeigen
Else
.Send ' Sofort senden
MsgBox "E-Mail wurde gesendet an: " & recipient, vbInformation, "Versendet"
End If
End With

Cleanup:
' Temporäre Datei optional löschen:
' Nur löschen, wenn nicht geöffnet. Bei .Display bleibt der Anhang bestehen – Löschen ist trotzdem ok.
On Error Resume Next
If Len(Dir$(pdfFullPath)) > 0 Then Kill pdfFullPath
On Error GoTo 0

Exit Sub

ErrHandler:
MsgBox "Fehler: " & Err.Number & " — " & Err.Description, vbCritical, "Makrofehler"
Resume Cleanup
End Sub

' Hilfsfunktion: unerlaubte Zeichen aus Dateinamen entfernen
Private Function CleanFileName(ByVal s As String) As String
Dim badChars As Variant, i As Long
badChars = Array("\", "/", ":", "*", "?", """", "", ">", "|")
For i = LBound(badChars) To UBound(badChars)
s = Replace(s, badChars(i), "_")
Next i
CleanFileName = s
End Function




Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Fehler bei Zuweisung von Outlook
05.12.2025 12:52:19
RPP63
Moin!
Das "neue" Outlook ist eine browsergestützte App, die sich nicht mittels VBA steuern lässt.

Da ich mir aber nicht 100%ig sicher bin, lasse ich offen.

Gruß Ralf
Da gibt es ein...
05.12.2025 13:11:46
Case
Moin Marco, :-)

... Problem: ;-)

"Neues" Outlook: ;-)

Mit VBA - COM: Nicht mehr möglich. ;-)

Mit CDO: https://vbatrainer.de/outlook-neue-version/#:~:text=Microsoft%20hat%20eine%20neue%20Outlook%20Version%20ver%C3%B6ffentlicht%2C%20in,Mails%20aus%20Excel%20heraus%20%C3%BCber%20VBA%20versenden%20kannst

Mit Graph API: Möglich, aber schwierig, da du einen Authentifizierungstoken brauchst. ;-)
https://learn.microsoft.com/de-de/graph/use-the-api

Mit Power Automate: Ja - aber da muss man sich reinarbeiten. ;-)
https://learn.microsoft.com/de-de/power-automate/getting-started

Mit Office Scripts / Add-Ins: Das geht auch - aber auch da ist es Arbeit. ;-)

Servus
Case
Anzeige
AW: Da gibt es ein...
05.12.2025 13:15:57
MarcoR
Oha...vielen Dank für die Info. Ich denke mal ich schau mir das mal gaaaaaaanz in Ruhe an. Wäre ja zu einfach gewesen.
Vielen Dank an alle.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige