Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Mail ohne Nachfrage senden

VBA Mail ohne Nachfrage senden
16.05.2013 08:35:07
gisela
Hallo,
ich brauche Hilfe beim Mailversand.
Die Mail soll einmal am Tag versandt werden.
Das klappt nicht immer. Warum weiss ich nicht. Die Mail erscheint dann auf meinem Desktop und ich muss senden nochmal bestätigen. Der Inhalt der Mail ist ok.
Die Mail soll ohne Nachfrage direkt gesendet werden.
Hier der Makro, der aus meiner Gogglesuche stammt:
Sub Email()
Application.ScreenUpdating = False
Sheets("tagesmit").Select
Range("M14").FormulaR1C1 = "0"
Range("M14").Select
Application.Wait Now + TimeValue("00:00:01")
If InStr(ActiveCell.Value, "0") > 0 Then
ActiveCell.Replace What:="0", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range(ActiveCell.Offset(0, -0), ActiveCell.Offset(0, -4)).Select
Selection.Copy
Application.ScreenUpdating = False
Dim strName As String
Dim ol, Mail As Object
Set ol = CreateObject("Outlook.Application")
Set Mail = ol.CreateItem(0)
Mail.Subject = " Tagesanwesenheit Viernheim " & Now
Mail.To = "gisela@xxx.de"
Mail.cc = ""
Mail.bcc = ""
Application.SendKeys "{TAB}"
Mail.body = Chr(13) & "Hallo, ?" & Chr(13) & _
"o.a. die Tagesübersicht" & Chr(13) & "Liebe Grüße" & Chr(13) & "Gisela" & Chr(13) & _
"Dieses Mail wurde automatisch versandt"
Mail.Display
Application.SendKeys "{TAB}"
Application.SendKeys "{TAB}"
Application.SendKeys ("^v")
Application.SendKeys "%s", True
End If
End Sub
Vielen Dank für jede Hilfe
gisela

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 08:38:37
Klaus
Hallo Gisela,
das ist ja schrecklich mit den ganzen sendkeys ....
kurze Lösung: statt "Display" und dann mit Sendkeys absenden, direkt absenden. Die Sendkeys Kommandos sind dann nicht mehr nötig.
Mail.send
'Application.SendKeys "{TAB}"
'Application.SendKeys "{TAB}"
'Application.SendKeys ("^v")
'Application.SendKeys "%s", True

Ich meld mich aber nochmal mit einer noch besseren Lösung.
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 08:59:47
Klaus
Hi Gisela,
probier es mal so. Die unnötigen SELECT, ACTIVATE und SENDKEYS habe ich aus dem Code entfernt.
Statt mit "copy; STRG+V" füge ich die betreffenden Zellen direkt in den HTML-Body ein.
Was dieser Teil deines Codes:
Range("M14").FormulaR1C1 = "0"
Range("M14").Select
Application.Wait Now + TimeValue("00:00:01")
If InStr(ActiveCell.Value, "0") > 0 Then

bewirken soll ist mir absolut befremdlich. Du schreibst "0" in eine Zelle, und wenn es eine Sekunde später NICHT 0 ist, dann ...? Ich kann nur raten, dass hier ein anderes Ereignissmakro mitspielt, welches du uns vorenthalten hast. Ich hab den Teil umgeschrieben, um SELECT zu vermeiden. Statt alles in eine große IF-Schleife zu packen, lasse ich den Test eine boolean-Variable ändern (und dann wird die Mail gesendet oder eben nicht). Dient der Übersichtlichkeit, da ich so auf allzuweit geschweifte IF-Blöcke verzichten konnte.
Hier der ganze Code zum testen:
Option Explicit
'Module to send Excel-Sheet directly with outlook
'April 2013 by Klaus M.vdT.
'original Code by mumpel / www.herber.de / 11.04.2013 11:23:25
'https://www.herber.de/forum/messages/1308295.html
'MODIFIED Mai 2013 for Gisela (removed "attached file" code)
Sub PrepareAndSend()
Dim olApp         As Object
Dim olOldBody     As String
Dim sText As String
Dim sTo As String
Dim sCC As String
Dim sSubject As String
Dim i As Integer
Dim bSendForReal As Boolean
bSendForReal = False
sTo = "gisela@xxx.de"
sCC = ""
sSubject = "Tagesanwesenheit Viernheim " & Format(Now, "dd.mm.yyyy hh:mm")
With Sheets("tagesmit").Range("M14")
.FormulaR1C1 = "0"
Application.Wait Now + TimeValue("00:00:01")
If InStr(.Value, "0") > 0 Then
.Replace What:="0", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:= _
False
bSendForReal = True
End If
sText = Chr(13) & "Hallo, ?" & Chr(13) & _
"o.a. die Tagesübersicht" & Chr(13) & "Liebe Grüße" & Chr(13) & "Gisela" & Chr(13) & _
"Dieses Mail wurde automatisch versandt" & Chr(13)
For i = 0 To 4
sText = sText & .Offset(0, -i).Value & Chr(13)
Next i
End With
If bSendForReal Then
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.GetInspector.Send
olOldBody = .htmlBody
.To = sTo
.cc = sCC
.Subject = sSubject
.htmlBody = sText & olOldBody
End With
End If
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 10:24:20
gisela
Hallo Klaus,
vielen Dank für deine Hilfe.
Ich habe deinen Vorschlag ausprobiert. Hier kommt eine Fehlermeldung:Objekt unterstützt Eigenschaft oder Methode nicht
.GetInspector.Send
olOldBody = .htmlBody
.To = sTo
.cc = sCC
.Subject = sSubject
.htmlBody = sText & olOldBody
End With
End If
End Sub Dem Makro ist in der AM nur senden um XX Uhrzeit vorgeschaltet.Der Inhalt wurde bisher auch immer in der zu verwendenden Mail richtig angezeigt. Leider habe ich nur begrenzte Kenntnisse mit dem Recorder.
Hier der Inhalt der Arbeitsmappe:
Private Sub Workbook_Open()
Application.OnTime TimeValue("14:00:00"), "Email"
End Sub
Hast du vielleciht noch einen Vorschlag?
Liebe Grüße
gisela

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 10:36:09
mumpel
Hallo!
.GetInspector.Send gibt es nicht.
In Outlook 2000-2003 ist die Nachfrage normal. Tipps gab es schon zuhauf. Email erst anzeigen, dann mit SendKeys senden. Oder auf eine neue Officeversion umsteigen. In den aktuellen Versionen ist es vom Status des Antivirenprogramms abhängig, ob die Email ohne Nachfrage gesendet wird oder nicht.
Gruß, René

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 10:40:31
Klaus
.GetInspector.Send gibt es nicht.
oops! Sorry Gisela!
Dann doch mit Sendkeys, wie Mumpel schrieb:
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.GetInspector.Display
olOldBody = .htmlBody
.To = sTo
.cc = sCC
.Subject = sSubject
.htmlBody = sText & olOldBody
End With
Application.SendKeys "%s", True
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 12:31:30
gisela
Hallo,
vielen Dank euch beiden. Senden funktioniert.
Der Text wird komplett hintereinander geschrieben. Ich versuche mit & vbLf & vbLf einen Zeilenumbruch einzufügen. Das funktioniert leider noch nicht. Was mache ich falsch?
Liebe Grüße
gisela

AW: VBA Mail ohne Nachfrage senden
16.05.2013 12:32:07
gisela
Hallo,
vielen Dank euch beiden. Senden funktioniert.
Der Text wird komplett hintereinander geschrieben. Ich versuche mit & vbLf & vbLf einen Zeilenumbruch einzufügen. Das funktioniert leider noch nicht. Was mache ich falsch?
Liebe Grüße
gisela

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 12:38:18
Klaus
Hallo Gisela,
stimmt - es ist in meinem Makro HTML-Text. Das geht so:
sText = "br Hallo, ? br "& _
"o.a. die Tagesübersicht br "Liebe Grüße br  "Gisela br "& _
"Dieses Mail wurde automatisch versandt br"
For i = 0 To 4
sText = sText & .Offset(0, -i).Value & "br "
Next i

Aber statt br schreibst du jedesmal
"kleinerZeichen" br "größerzeichen"
ohne Leerzeichen
(wird hier im Forum schlecht angezeig)
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 13:03:53
gisela
Hallo,
vielen Dank für deine Änderung.
Erhalte eine Syntaxfehlermeldung
So siehts aus:
sText = "
Hallo, ?
"& _
"o.a. die Tagesübersicht
"Liebe Grüße
"Gisela
"& _
"Dieses Mail wurde automatisch versandt
"
For i = 0 To 4
sText = sText & .Offset(0, -i).Value & "
"
Next i
Was habe ich jetzt falsch gemacht?
Liebe Grüße
gisela

Anzeige
AW: VBA Mail ohne Nachfrage senden
16.05.2013 13:11:46
Klaus
Hallo Gisela,
wie gesagt, dass lässt sich hier im Forum kaum feststellen. Aber hier geht es nur noch um Stringverkettung, das solltest du doch hinbekommen? Der Fehler ist, die " sind falsch gesetzt bzw zuviel.
So soll es:
https://www.herber.de/bbs/user/85359.txt
Grüße,
Klaus M.vdT.

Anzeige
Super - herzlichen Dank, funktioniert o.T
16.05.2013 13:33:04
gisela
o.T

Danke für die Rückmeldung! owT.
16.05.2013 13:46:49
Klaus
.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA für den automatischen Mailversand ohne Nachfrage


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul, indem du mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" klickst und "Einfügen" > "Modul" wählst.

  3. Füge folgenden Code ein, um eine Mail ohne Nachfrage zu versenden:

    Sub PrepareAndSend()
       Dim olApp As Object
       Dim sText As String
       Dim sTo As String
       Dim sSubject As String
    
       sTo = "gisela@xxx.de"
       sSubject = "Tagesanwesenheit Viernheim " & Format(Now, "dd.mm.yyyy hh:mm")
    
       ' Email-Text erstellen
       sText = "Hallo, ?<br>o.a. die Tagesübersicht<br>Liebe Grüße<br>Gisela<br>Dieses Mail wurde automatisch versandt<br>"
    
       ' Outlook-Objekt erstellen und Mail versenden
       Set olApp = CreateObject("Outlook.Application")
       With olApp.CreateItem(0)
           .To = sTo
           .Subject = sSubject
           .htmlBody = sText
           .Send ' Direkt senden ohne Nachfrage
       End With
    End Sub
  4. Speichere Deine Änderungen und schließe den VBA-Editor.

  5. Um die Mail zu einem bestimmten Zeitpunkt zu versenden, kannst du folgendes Makro im "DieseArbeitsmappe"-Modul hinzufügen:

    Private Sub Workbook_Open()
       Application.OnTime TimeValue("14:00:00"), "PrepareAndSend"
    End Sub

Häufige Fehler und Lösungen

  • Fehlermeldung: "Objekt unterstützt Eigenschaft oder Methode nicht"
    Stelle sicher, dass du die richtige Methode verwendest, um die Mail zu senden. Ersetze .GetInspector.Send durch .Send.

  • Text wird nicht korrekt formatiert
    Wenn der Text in der E-Mail nicht richtig angezeigt wird, überprüfe die Verwendung von <br> für Zeilenumbrüche im HTML-Body.


Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch die Outlook Mail senden Tastenkombination verwenden. Mit ALT + F öffnest du das Menü für den Mailversand in Outlook. Du kannst dann die Informationen manuell eingeben.


Praktische Beispiele

  1. Automatischer Versand von Berichten
    Du kannst den oben genannten Code anpassen, um wöchentliche Berichte zu versenden, indem du die TimeValue-Funktion entsprechend änderst.

  2. Dynamische E-Mail-Inhalte
    Nutze Werte aus deinem Excel-Dokument, um den E-Mail-Inhalt dynamisch zu gestalten:

    sText = "Die aktuellen Daten sind: " & Sheets("Datenblatt").Range("A1").Value

Tipps für Profis

  • Verwende HTML-Formatierung, um ansprechendere E-Mails zu erstellen.
  • Teste deinen VBA-Code regelmäßig, um sicherzustellen, dass er wie gewünscht funktioniert.
  • Halte die Outlook-Anwendung geöffnet, damit der Mailversand reibungslos funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die E-Mail ohne Nachfrage gesendet wird?
Die Einstellung hängt von der Outlook-Version und dem Antivirenprogramm ab. In den neuesten Versionen sollte das Senden ohne Nachfrage funktionieren.

2. Was kann ich tun, wenn der VBA-Code nicht funktioniert?
Überprüfe, ob die richtigen Bibliotheken in den Verweisen aktiviert sind oder ob der Code an die aktuelle Excel-Version angepasst werden muss.

3. Wie kann ich den E-Mail-Inhalt formatieren?
Nutze HTML-Tags wie <br> für Zeilenumbrüche oder <b> für fettgedruckten Text in deinem E-Mail-Body.

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