Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
600to604
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
600to604
600to604
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA warten lassen

VBA warten lassen
18.04.2005 14:57:14
Timo
Hi!
Ich lasse aus Excel eine Mail versenden... Ich will jetzt, daß das Excel-VBA im Hintergrund wartet, bis die Email wirklich versendet wurde, damit ich prüfen kann, ob die Mail gesendet wurde oder ob vorher Cancel gedrückt wurde... Wie geht das?

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA warten lassen
18.04.2005 16:45:08
Nepumuk
Hallo Timo,
ein Beispielcode, der das drücken der Abbruchtaste erkennt.


Option Explicit
Private Declare Function SetActiveWindow Lib "USER32.DLL" ( _
    ByVal hwnd As LongAs Long
Private Declare Function FindWindow Lib "USER32.DLL" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As StringAs Long
Public Sub prcMail()
    Dim myOutlookApplication As Object, myMail As Object
    Set myOutlookApplication = CreateObject("Outlook.Application")
    Set myMail = myOutlookApplication.CreateItem(0)
    With myMail
        .To = "abc@xyz.de"
        .Subject = "Rücksendung " & ThisWorkbook.Name
        .Attachments.Add ThisWorkbook.FullName
        On Error Resume Next
        .Send
        On Error GoTo 0
    End With
    SetActiveWindow FindWindow("xlMain", vbNullString)
    Select Case Err.Number
        Case 0
            MsgBox "Die Mappe wurde erfolgreich gesendet." & vbLf & vbLf & _
                "Ein Kopie der gesendeten Nachricht befindet sich in Ihrem Outlook-Ordner 'Gesendete Objekte'." _
                , 64, "Information"
        Case 287
            MsgBox "Die Mappe wurde nicht gesendet, da Sie den Vorgang abgebrochen haben.", 64, "Hinweis"
        Case Else
            MsgBox "Fehler: " & CStr(Err.Number) & vbLf & vbLf & Err.Description, 16, "Fehlermeldung"
    End Select
    Set myMail = Nothing
    Set myOutlookApplication = Nothing
    ThisWorkbook.Saved = True
End Sub


Gruß
Nepumuk
Anzeige
AW: VBA warten lassen
19.04.2005 08:45:15
Timo
Hi!
Danke für die Antwort. Der Code ist nett, bringt mir aber glaube ich leider nichts... Mein Code sieht wie folgt aus:
Set OutLookJob = CreateObject("Outlook.Application")
Set mymail = OutLookJob.CreateItemFromTemplate("P:\ITS-RMTm\PUBLIC\Prozesse-Dokumentation-RM\Technik\RÜCKMELDUNG.oft") '*.Msg, *Oft
With mymail
.To = "G ISAM-RM"
.Subject = "Rückmeldung für " & release & " von " & projekt & ": " & rueckmeldung
.body = "Diese Nachricht wurde automatisch erstellt. Die Datei, die versendet werden soll, ist angehängt." _
& "Sie können jetzt hier noch bei Bedarf zusätzlichen Nachrichtentext mit einfügen." & vbCrLf & vbCrLf & vbCrLf & vbCrLf
.attachments.Add strDateiname
.display
End With
Set OutLookJob = Nothing
Das Problem bei mir ist, daß ich vorher ein .Display machen will, damit der User in der Mail noch Eingaben machen kann... Aber die asynchrone Arbeitsweise von VBA macht mir hierbei leider einen Strich durch die Rechnung... Gibts noch ne andere Möglichkeit zu überprüfen, ob die Nachricht gesendet wurde (außer, die Eingaben vorher in einer UserForm zu machen und dann wie oben vorzugehen...)?
Anzeige
AW: VBA warten lassen
19.04.2005 15:53:50
Nepumuk
Hallo Timo,
du könntest natürlich die gesendeten Objekte durchsuchen, ob das Mail schon drin ist. Aber wie lange soll das Programm warten? Ich starte den Mailaufruf und dann mache ich Mittag. Soll Excel dann eine halbe bis Dreiviertelstunde warten bzw. im Sekundentakt den Postausgang prüfen?
Gruß
Nepumuk
AW: VBA warten lassen
20.04.2005 08:24:21
Timo
*g*
Moin!
Ne, nicht so ganz... Excel läuft ja nach dem .Display im Hintergrund weiter. Aber bei dem .Display soll er warten, bis wirklich auf "Senden" gedrückt wurde oder die Mail geschlossen wurde. Anschließend wollte ich irgendwie überprüfen, ob die Mail nun versendet wurde oder ob sie geschlossen wurde. Wenn sie versendet wurde, soll in der Excel-Mappe ein Eintrag gemacht werden wie "Am 23.4.05 versendet".
Ich vermute, daß das nicht klappen wird, zum einen, weil ich den asynchronen Arbeitsrythmus nicht wegbekomme, zum anderen, weil mir keine Lösung einfällt, in Excel ein Outlook-Objekt auszuwerten... Aber vielleicht gibts ja doch ne Lösung...
Anzeige
AW: VBA warten lassen
20.04.2005 20:16:07
Nepumuk
Hallo Timo,
du könntest einen Timer starten, der im Sekundentakt prüft, ob das Mailfenster noch geöffnet ist. Der würde Excel nicht belasten, da das Makro von einer DLL ausgeführt wird. Wurde es geschlossen, dann den/die Postausgangsordner überprüfen. In wie weit kennst du dich mit API aus?
Noch eine Schwierigkeit. Was, wenn ich Excel schließe und das Mail erst dann versende?
Gruß
Nepumuk
AW: VBA warten lassen
21.04.2005 08:22:21
Timo
Richtig...
Deswegen denke ich, lasse ich es auf sich bewenden... Es wäre zwar nice to have gewesen, aber wenns nicht so einfach geht... Ich hab nur gedacht, man könnte Excel anweisen, direkt nach dem .Display abzuwarten, bis die Mail gesendet wurde... Aber wenns nicht geht. Naja. Trotzdem Danke!
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige