E-Mail automatisch aus Excel versenden
#1
Hallo zusammen,

ich habe eine Tabelle in Excel mit mehreren Spalten und Zeilen (15 & 17 derzeit). Nun möchte ich noch ergänzend ein Datum und Betreff zusätzlich eintragen.
Die Idee ist, sobald dieses Datum erreicht ist, dass mir eine automatische E-Mail über Outlook (praktisch als Erinnerung) von Excel zugesendet wird.
Wichtig sind jedoch im Grunde genommen nur 3 Spalten...Spalte A (Datum), Spalte B (Eine Nummer die variiert) und Spalte C (Betreff gleichbleibend). 
Zur Verdeutlichung, was ich mir ungefähr vorstelle: Erinnerung! Kontrolle fällig von Nummer xxx

Ich habe bereits in einigen Foren danach gesucht, aber bisher nichts entsprechend meines Wunsches gefunden. Deswegen habe ich jetzt mal ein Code der schon geschrieben wurde hinzugefügt, der meiner Vorstellung aus dem dazu verfassten Text eines anderen in etwa hoffentlich entspricht.
Ich wäre für jeden Ratschlag und Hilfe dankbar!

Vielen Dank im voraus!

PS: Ich hab leider keine Ahnung von Programmieren, deswegen alle Vorschläge bitte wenn möglich einmal für Dummies und möglichst genau beschreiben :) 
      Ich Hätte evtl. jemanden dem ich die hier genannten Vorschläge schicken kann, der sich bisschen damit auskennt aber auch kein Profi ist wie Ihr hier;) 
Code:
Sub Excel_Serienmail_mit_mehreren_Anlagen_via_Outlook_Senden()
    'Variablendefinition
    Dim strName As String
    Const lw = "c:\"
    Const pfad = "c:\"
    Dim fs As Object, F As Object
    Dim OutApp As Object, Mail As Object
    Dim i As Integer, y As Integer, Msg As Integer
    Dim Nachricht As Variant
    Dim AWS As String
    Dim AnzEmpfänger As Integer
   
    Rem Diese Mappe speichern
   
    strName = ActiveWorkbook.Name
    Debug.Print strName
    ChDrive lw
    ChDir pfad
               
    ActiveWorkbook.SaveAs Filename:=strName, FileFormat:=xlNormal, Password:= _
    "", writeResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
   
    'Variablen füllen
    'Filesystemobjekt erstellen
    Set fs = CreateObject("Scripting.FileSystemObject")
    'Hier die Anzahl Empfänger definieren
    'Kann auch ein Range auf der Tabelle sein
    AnzEmpfänger = Range("b1")
    AnzAnhang = 1
    'Sendevorgang einleiten
    For i = 1 To AnzEmpfänger
        Set OutApp = CreateObject("Outlook.Application")
        Set Nachricht = OutApp.CreateItem(0)
        With Nachricht
            .To = Cells(i + 3, 1) 'irgendwer@irgendein-provider.de
            .Subject = Cells(i + 3, 2) & " " & Now 'Betreffzeile
            .Body = Cells(i + 3, 3) 'Sendetext"
            For y = 4 To AnzAnhang + 3
                Rem AWS = Cells(y, 6)
                AWS = pfad & strName
                'Wenn die Zelle / Variable leer ist
                'wird diese Schleife für die Attachments abgebrochen
                If AWS = "" Then Exit For
                .attachments.Add AWS
            Next y
            'Hier wird die Mail zuerst angezeigt
            .Display
            'Hier wird die Mail gleich in den Postausgang gelegt
            '.Send
                       
        End With
        'Variablen zurücksetzen
        Set OutApp = Nothing
        Set Nachricht = Nothing
        'Warten auf Outlook
        Application.Wait (Now + TimeValue("0:00:05"))
       
    Next i
   
End Sub
Top
#2
Hallo,

prinzipiell stellt sich mir bei deinem Vorhaben zunächst eine Frage oder viel mehr ein Problem. Excel bzw. ein Makro funktioniert natürlich nur, wenn du die Datei öffnest. Du hast die verschiedensten Automatiken welche ein Makro zum Starten bringt, jedoch gilt für alle, dass du die Datei öffnen musst. Du kannst also nicht erwarten, dass du Morgens dein Outlook öffnest und du hast dort eine oder mehrere Mails, aus denen die Fälligkeit zu entnehmen ist. Das sollte dir in jedem Fall bewusst sein!

Abgesehen davon lässt du dein Makro derzeit in einer klassischen Sub Routine laufen. Damit das ganze automatisch funktioniert, hast du mehrere Möglichkeiten zur Auswahl:
Private Sub Workbook_Open() - Makro startet beim Öffnen der Datei
Private Sub Workbook_Change() - Makro wird bei jeder Änderung der Datei ausgeführt
Private Sub Workbook_BeforeSave() - Makro wird vor dem Speichern ausgeführt
Private Sub Workbook_BeforePrint() - Makro wird vor dem Drucken ausgeführt
Private Sub Workbook_BeforeClose() - Makro wird vor dem Schließen der Datei ausgeführt.

Aus meiner Sicht kommen zwei Möglichkeiten in Frage
Private Sub Workbook_Open():
Du öffnest Morgens die Datei und sie teilt dir umgehend mit, das musst du heute auf jeden Fall bearbeiten.

Private Sub Workbook_BeforeClose():
Du schließt die Datei und dein Makro prüft, welche Fälle heute noch geprüft werden müssen und teilt dir diese mit.

Was die faktische Umsetzung betrifft, da kann ich dir von hier aus leider auch nicht helfen, da wir bedauerlicherweise Lotus Notes einsetzen. Der Code für sich sieht nach meinem Verständnis jedoch recht sinnvoll aus und ist doch sogar teilweise auskommentiert, sodass ein anpassen an deine Bedürfnisse von deinem Bekannten doch möglich sein sollte?!?

Viele Grüße
Micha
Top
#3
Hallo Garfield,

anbei ein kleines Makro, mit welchem Du "dialoggesteuert" einen Bereich definieren kannst, welcher dann per Mail versandt wird.
Vielleicht ist das eine Basis?
Aus Deiner Beschreibung geht nicht hervor, wann und wie das ganze ausgelöst werden soll.

Gruß
Ich

Sub AuswahlAlsEMailVersenden()
Dim Empfänger As String
Dim Bereich As Range
   
    'Emailempfänger hinterlegen
    Empfänger = "DeineMailadresse@WhatEver.com" 'bitte ergänzen/ändern
   
    'Auswahl der zu versendenen Spalten über eine Inputbox. Kann/muss ggf. angepasst werden
    Set Bereich = Application.InputBox("Wählen Sie den Bereich aus, den Sie senden möchten", Type:=8)
    'Kopieren des zu sendenden Bereichs
    Range(Bereich.Address).Copy
    'Öffnen einer neuen Mappe
    Workbooks.Add
    'kopierten Bereich einfügen
    ActiveSheet.Paste
    'Speichern als "Anhang.xls"
    ActiveWorkbook.SaveAs "Anhang.xls"
    '"Email senden" Dialog wird angezeigt mit oben definiertem Empfänger und Anhang
    Application.Dialogs(xlDialogSendMail).Show _
    Empfänger, " Erinnerung! Kontrolle fällig von Nummer xxx"

End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 12 - mit VBAHTML 12.6.0

Top
#4
Hallo,

Danke schon mal für die Rückmeldungen!

@User17330
Von deinen genannten Vorschlägen macht meines Erachtens "Private Sub Workbook_Open():" auch am meisten Sinn.
Das Excel geöffnet sein muss hab ich mir schon fast gedacht, schade.
Meine Frage diesbezüglich wäre, ob genau die Datei offen sein muss, aus der die Daten in der E-Mail verwendet werden oder reicht es wenn generell Excel geöffnet ist, man z.B. gerade mit einer anderen Datei arbeitet?

@IchBinIch
Toll, Danke für das Makro. Zu deinem 2. Punkt, in meinem ersten Beitrag hab ich ja geschrieben...die E-Mail soll als Erinnerung verschickt werden, sobald das entsprechende Datum in der jeweiligen Zeile erreicht oder überschritten wurden ist:)

Beste Grüße
Top
#5
Hi,

Du bist ja witzig :19: .

Zitat:... sobald das entsprechende Datum in der jeweiligen Zeile erreicht oder überschritten ...

Zitat:... Nun möchte ich noch ergänzend ein Datum und Betreff zusätzlich eintragen. ...

Wo denn biiteschön? A1 oder C4? Bei derzeit 15 Zeilen und 17 Spalten ergeben sich gefühlt 255 Möglichkeiten :32:

Gruß
Ich
Top
#6
Okay vllt. hab ich mich bisschen undeutlich ausgedrückt.
...Spalte A (Datum) entsprechend die Angaben aus den Zeilen 2-18 z.B, Spalte B (Betreff gleichbleibend) und Spalte C (Eine Nummer die variiert) erneut von Zeile 2-18. 

Beste Grüße
Top
#7
Vielleicht stell ich mich jetzt extrem dumm an? Huh
Kannst Du bitte ein Beispieldatei hochladen und anhand dieser beschreiben wo welche Information steht und was in die Email soll.

Danke und Gruß
Ich

Tabelle bereit stellen: Guckst Du hier
Top
#8
Anbei findest du ein Beispiel. In Wirklichkeit sind es wie gesagt noch ein paar mehr Spalten und Zeilen aber die sind für das was in die Mail soll uninteressant.
Wichtig ist nur der Betreff (Erinnerung) und die zum entsprechenden Datum dazugehörige Nummer.
Ich hoffe das ist verständlich so wie ich es jetzt dargestellt habe:)

Beste Grüße


Angehängte Dateien
.xlsx   Beispiel.xlsx (Größe: 10,61 KB / Downloads: 49)
Top
#9
Also pro Zeile eine Email?
Und wie ist das Kriterium um eine Email zu senden? Das aktuelle Datum?
Also wenn Wert in Spalte A <= Tagesdatum dann eine Email?
Top
#10
Genau eigentlich pro Zeile eine Email.
Was natürlich super wäre, falls jetzt mehrere Nummer auf den selben Stichtag bzw. Datum fallen, dass dann einfach eine E-Mail gesendet wird mit der Auflistung der zu kontrollierenden Nummern.
Weiß aber nicht ob das jetzt zu kompliziert oder aufwendig ist:) (weil sonst bekommt man ja, wenn 20 Nummern auf das selbe Datum fallen, 20 Mails...was bisschen nervig wäre)
Exakt, das Kriterium soll das aktuelle Datum sein...Spalt A <= Tagesdatum
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste