Excel-VBA: Mail versenden mit Anhang

  • Sonstige

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Pascal.

    Excel-VBA: Mail versenden mit Anhang

    Hallo,

    ist es möglich, über eine VBA-Funktion in Excel das aktuelle Excel-File selbst (also das, in dem auch die Funktion verankert ist) via E-Mail zu versenden bzw. als Anhang an eine Mail anzufügen, die dann in den Postausgang von Outlook gelegt wird? Es wäre wirklich dringend... Ich habe übrigens noch nie VBA gemacht und stehe dementsprechend auf dem Schlauch. Bitte also um eine Antwort. :)

    MfG
    Blurry

    Visual Basic-Quellcode

    1. Sub SendAutomaticMail()
    2. Dim objWB As Workbook
    3. Set objWB = Excel.Application.ActiveWorkbook
    4. With objWB 'Empfänger Subject Empfangsbestätigung
    5. .SendMail "BlondBunny@Playboy.de", "Surprise !", True
    6. End With
    7. End Sub


    Vorteil : kein API-Zugriff notwendig
    Nachteil : Meldung an den Sender, daß ein Programm versucht über den Standard-E-Mail-Handler eine Mail zu senden mit Abfrage nach Zulassen / Unterbinden.

    Alternativlösung ist APIs "ShellExecute". Noch komplizierter, aber dafür für den User nicht sichtbar, ein Socket erstellen, mit dem Mailprovider connecten, Mail erstellen usw.

    Ich glaube, das Beispiel ist die praktikabelste Lösung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pascal“ ()

    Vielen Dank! Das hat mir sehr weitergeholfen. Dass die Sicherheitsabfrage kommt, ist sogar gut, denn so passiert es nicht, dass jemand die Datei öffnet, was ändert, sie schließt, noch mal öffnet, wieder was ändert und dann am Ende zwei Mails verschickt hat. Wahrscheinlich hätte ich die Abfrage separat programmieren müssen, wäre sie nicht sowieso schon vorhanden. :)
    Das mehrmalige Versenden der Arbeitsmappe ist damit nicht zu verhindern. Dazu könnte eine Lösung sein, in einer Zelle oder in einem für den User nicht sichtbaren Arbeitsblatt das Datum und die Uhrzeit der letzten versendeten Mail zu hinterlegen und erst nach einem gewissen Zeitabstand (bspw. 8h für einen Arbeitstag) das Versenden der Mail zu erlauben.

    Eins muss ich noch sagen : ich hab eschon lange nicht mehr gehört, daß es jemandem recht ist wenn eine Sicherheitsabfrage kommt. Ist mein Interesse doch hauptsächlich das Umgehen von Sicherheitseinschränkungen. :D

    Kleiner Scherz am Rande...
    @ Pascal:
    Es ist nicht das mehrmalige senden prinzipiell gemeint, sondern das unabsichtliche, mehrmalige senden gemeint ;)
    Und das wird durch diese Abfrage verhindert, oder?

    So hab ichs zumindest verstanden ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    Original von Pascal
    Das mehrmalige Versenden der Arbeitsmappe ist damit nicht zu verhindern.


    Ich hätte auch nie gedacht, dass ich so was mal sagen würde. ;) Aber in diesem Fall ist es in der Tat nützlich. Dass damit das mehrmalige Versenden nicht unterbunden werden kann, ist mir klar, aber so bleibt immerhin die Kontrolle darüber erhalten - der Anwender kann selbst entscheiden, ob er's machen will, und er wird selbst wissen, dass es nicht sinnvoll ist, zwei Versionen zu verschicken (was es genau damit auf sich hat, ist jetzt zu kompliziert zu erklären...).

    Edit: @ Mad Andy: Genau...


    Original von Pascal Dazu könnte eine Lösung sein, in einer Zelle oder in einem für den User nicht sichtbaren Arbeitsblatt das Datum und die Uhrzeit der letzten versendeten Mail zu hinterlegen und erst nach einem gewissen Zeitabstand (bspw. 8h für einen Arbeitstag) das Versenden der Mail zu erlauben.


    Jo, das wäre keine schlechte Idee. Aber letztendlich nicht nötig, glaub ich.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blurry“ ()

    der Anwender kann selbst entscheiden, ob er's machen will, und er wird selbst wissen, dass es nicht sinnvoll ist,


    Gut, dann ist der andere Krams von wegen Hinterlegen der zuletzt gesendeten Mail usw. überflüssig.

    Wie gesagt, wenn es doch notwendig ist - das ist mit wenigen Codezeilen zu realisieren. Don´t shy to ask. ;)