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

E-Mail mit Signatur Laufzeitfehler 287

Forumthread: E-Mail mit Signatur Laufzeitfehler 287

E-Mail mit Signatur Laufzeitfehler 287
09.09.2020 19:18:30
René
Hallo zusammen,
bei folgendem Skript laufe ich auf einen Laufzeitfehler 287 und ich verstehe nicht wieso. Google war leider nicht hilfreich :/ Ich arbeite mit HTMLBody, da ich eine Signatur eingefügt haben möchte. Habe auch "htmlBody = "Test
" & .htmlBody" versucht, also ohne den Umweg über die Variable. Beide Male die selbe Fehlermeldung.
Das Skript habe ich zur Übersicht gekürzt, die Variablen sind alle als String deklariert.
Habt ihr eine Idee? Vielen Dank im Voraus!
Gruß René

Sub emailerstellen()
Dim objOutlook As Object
Dim objMail As Object
file = Dir(pfad & "*.xlsx")
Do While file  ""
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.Display
.GetInspector
olOldBody = .htmlBody
.To = an
.cc = cc
.Subject = "Online Survey (Corona)"
.htmlBody = "Test" & olOldBody
.Attachments.Add pfad & file
End With
file = Dir
End If
Loop
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mail mit Signatur Laufzeitfehler 287
09.09.2020 20:04:10
volti
Hallo Rene,
die CreateObject-Function würde ich nicht mit in die Schleife nehmen und das Mail-Object auf Nothing setzen, bevor es zur nächsten Mail geht.
Hier ein ungetesteter Vorschlag:
 
[Cc]
Sub emailerstellen() Dim objOutlook As Object Dim objMail As Object Set objOutlook = CreateObject("Outlook.Application") file = Dir(pfad & "*.xlsx") Do While file <> "" Set objMail = objOutlook.CreateItem(0) With objMail .GetInspector olOldBody = .htmlBody .To = an .cc = cc .Subject = "Online Survey (Corona)" .htmlBody = "Test" & olOldBody .Display .Attachments.Add pfad & file End With Set objMail = Nothing file = Dir ' End If Dieses End If ist zu viel Loop End Sub
 
____________________
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: E-Mail mit Signatur Laufzeitfehler 287
09.09.2020 20:11:04
volti
Hallo,
wobei ich mich gerade frage, ob Du wirklich jede Datei einzeln versenden willst oder eher in einer Mail?
 
[Cc]
Sub emailerstellen() Dim objOutlook As Object Dim objMail As Object Set objOutlook = CreateObject("Outlook.Application") Set objMail = objOutlook.CreateItem(0) With objMail .GetInspector olOldBody = .htmlBody .To = an .cc = cc .Subject = "Online Survey (Corona)" .htmlBody = "Test" & olOldBody .Display file = Dir(pfad & "*.xlsx") Do While file <> "" .Attachments.Add pfad & file file = Dir Loop End With Set objMail = Nothing End Sub
 
____________________
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: E-Mail mit Signatur Laufzeitfehler 287
14.09.2020 13:43:50
René
Hallo Karl-Heinz,
danke dir für die Antwort, habe deine Anmerkungen eingearbeitet, allerdings erhalte ich weiterhin den Laufzeitfehler 287. Er kommt direkt beim ersten Durchlauf bei der Zeile olOldBody = .htmlBody
Definiert als: Dim olOldBody as String
Auf den zweiten Post bezogen: Eine Datei pro E-Mail, das Skript läuft einwandfrei, wenn ich auf htmlbody verzichte, allerdings dann leider ohne Signatur..
Gruß René
Anzeige
AW: E-Mail mit Signatur Laufzeitfehler 287
14.09.2020 18:48:56
volti
Hallo Rene,
die Dimensionierung olOldBody als String ist ok, auch der gesamte Code ist bei mir lauffähig. Ich erhalte keinen Laufzeitfehler 287 und habe bei meinen Codes auch noch nie einen bekommen. Kann daher mangels Erfahrung wenig helfen.
Im Netz gibt es hierzu nur Anmerkungen zum .Send-Befehl, teilweise mit dem Hinweis auf Laufzeitprobleme.
Aber das ist bei Dir ja nicht der Fall.
Auch die Vorgabe des Bodyformats (s.u. code Zeile 12) und die Verschiebung des .Display-Befehls (Zeile13) dürften m.E. keinen Einfluss hierauf haben. Aber probiere es trotzdem mal aus.
[Cc]
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Sub emailerstellen()
 Dim objOutlook As Object
 Dim objMail As Object
 Dim olOldBody As String
 Dim Pfad As String
 
 Set objOutlook = CreateObject("Outlook.Application")
 file = Dir(sPfad & "*.xlsx")
 Do While file <> ""
    Set objMail = objOutlook.CreateItem(0)
    With objMail
         .bodyformat = 2
         .GetInspector.Display
         olOldBody = .htmlBody
         .To = an
         .cc = cc
         .Subject = "Online Survey (Corona)"
         .htmlBody = "Test" & olOldBody
         .Attachments.Add Pfad & file
    End With
    Set objMail = Nothing
    file = Dir
 Loop
End Sub
 
____________________
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

E-Mail mit Signatur in Excel VBA ohne Laufzeitfehler 287


Schritt-für-Schritt-Anleitung

Um eine E-Mail mit einer Signatur in Excel VBA zu erstellen und den Laufzeitfehler 287 zu vermeiden, befolge diese Schritte:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) und wähle Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub emailerstellen()
       Dim objOutlook As Object
       Dim objMail As Object
       Dim olOldBody As String
       Dim file As String
       Dim pfad As String
       Dim an As String
       Dim cc As String
    
       pfad = "C:\DeinPfad\" ' Passe den Pfad an
       an = "empfaenger@example.com"
       cc = "cc@example.com"
    
       Set objOutlook = CreateObject("Outlook.Application")
       file = Dir(pfad & "*.xlsx")
    
       Do While file <> ""
           Set objMail = objOutlook.CreateItem(0)
           With objMail
               .GetInspector
               olOldBody = .htmlBody
               .To = an
               .CC = cc
               .Subject = "Online Survey (Corona)"
               .htmlBody = "Test" & olOldBody
               .Attachments.Add pfad & file
               .Display
           End With
           Set objMail = Nothing
           file = Dir
       Loop
    End Sub
  4. Passe den Pfad und die E-Mail-Adressen an: Stelle sicher, dass du den Pfad zu deinen Dateien und die E-Mail-Adressen korrekt angibst.

  5. Führe das Skript aus: Drücke F5 oder wähle Ausführen > Sub/UserForm ausführen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 287: Dieser Fehler tritt häufig auf, wenn olOldBody nicht korrekt zugewiesen wird. Stelle sicher, dass die .GetInspector-Methode aufgerufen wird, bevor du auf .htmlBody zugreifst.

  • E-Mail wird nicht gesendet: Überprüfe, ob das Outlook-Objekt korrekt erstellt wurde und ob der E-Mail-Client geöffnet ist.

  • Falscher Pfad: Achte darauf, dass der angegebene Pfad zu den .xlsx-Dateien korrekt ist und die Dateien vorhanden sind.


Alternative Methoden

  • Versenden mehrerer Dateien in einer E-Mail: Du kannst den Code so modifizieren, dass alle .xlsx-Dateien in einer E-Mail angehängt werden. Ändere die Schleife wie folgt:

    file = Dir(pfad & "*.xlsx")
    Set objMail = objOutlook.CreateItem(0)
    With objMail
       .GetInspector
       olOldBody = .htmlBody
       .To = an
       .CC = cc
       .Subject = "Online Survey (Corona)"
       .htmlBody = "Test" & olOldBody
    
       Do While file <> ""
           .Attachments.Add pfad & file
           file = Dir
       Loop
       .Display
    End With

Praktische Beispiele

Ein einfaches Beispiel für den E-Mail-Versand:

Sub emailBeispiel()
    ' Hier kannst du den Code für den E-Mail-Versand ohne Laufzeitfehler 287 verwenden.
End Sub

Hierbei solltest du sicherstellen, dass die Variablen wie an, cc und pfad definiert sind.


Tipps für Profis

  • Debugging: Verwende Debug.Print um Variablenwerte während der Ausführung zu überprüfen.

  • Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um Fehler effizient zu handhaben.

  • Outlook-Einstellungen: Stelle sicher, dass in Outlook das Senden von E-Mails ohne Sicherheitswarnungen möglich ist.


FAQ: Häufige Fragen

1. Was bedeutet Laufzeitfehler 287?
Dieser Fehler tritt auf, wenn ein Problem mit den Methoden oder Eigenschaften eines Objekts in VBA vorliegt, oft verursacht durch den Zugriff auf ein Objekt, das nicht richtig initialisiert wurde.

2. Kann ich auch andere Dateitypen anhängen?
Ja, du kannst andere Dateitypen anhängen, indem du die Dateiendung in der Dir-Funktion anpasst (z.B. "*.pdf" für PDF-Dateien).

3. Wie kann ich die E-Mail direkt senden, anstatt sie anzuzeigen?
Ersetze .Display durch .Send im Code, um die E-Mail sofort zu senden.

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