Microsoft Excel

Herbers Excel/VBA-Archiv

Mailversand per VBA

Betrifft: Mailversand per VBA von: Toto
Geschrieben am: 24.09.2014 20:53:43

Hallo,

Ich bin denke dass ich was Excel angeht im Bereich Formeln etc. angeht einerseits schon recht fit, aber andererseits was das Thema VBA noch blutiger Anfänger bin und stehe nun vor einer leider für mich bisher unlösbaren Aufgabe die ich auch mit meinem schlauen Excel-Lehrbuch (Thomas heis, Einstieg in VBA mit Excel) nicht lösen konnte.
Es geht um Folgendes:
Ich werde jeden Monat ca. 300 Excel-Dateien (mal mit Makros,mal ohne) erzeugen lassen mittels VBA (das klappt schon alles gut, bin selbst überrascht) die in einem gemeinsamen Ordner abgelegt werden für den jeweils aktuellen Monat. Jeden Monat ein neuer Ordner in dem dann je eine Datei pro Kunde liegt die natürlich auch unterschiedlich heißen.
Das heißt es gibt einen Ordner für September, einen für Oktober,… und in jedem Ordner liegen ca. 300 Dateien die unterschiedlich heißen.
Diese Dateien unterscheiden sich ansonsten nur hinsichtlich der Werte jedoch nicht hinsichtlich des Aufbaus.
In Zelle B1 des Tabellenblattes Rechnung (Name ist in allen Dateien identisch) steht jeweils die Mailadresse des Kunden.
Gibt es eine Möglichkeit jede der Dateien in einem Monatsordner per VBA per Outlook versenden zu lassen an den Adressaten der in Zelle B1 steht?
Mein Ziel wäre also Folgendes: Ich wollte eine Excel-Steuerungsdatei mit Namen „Versand“ erstellen in der ich einen Command-Button einfüge und mit einem Makro verknüpfen kann welches folgendes erledigen soll:
Es sollen alle Dateien des jeweiligen Monatsordners (beispielsweise September) den ich gerne in der SteuerungsDatei „Versand“ in Zelle D5 eingeben würde über Outlook versendet werden. Jede Datei aber natürlich stets nur an den Empfänger der in den zu versendenden Dateien in der Zelle B1 angegeben ist. Kurzum: Jeder Kunde soll nur seine Datei bekommen.
Außerdem würde ich gerne in der in der Steuerungs-Datei in Zelle D6 den Betreff der Mails (für alle Mails identisch) eintragen und den Mailtext in den einzelnen zu versendenden Dateien in Zelle B2.
Ich hoffe ich habe mein Problem verständlich beschrieben und bin für jede Hilfe unendlich dankbar.
Ich habe versucht Dateien per VBA an Outlook zu senden. Dies habe ich aber nur für einzelne Dateien geschafft und auch nur nach vorherigem Dialog von Outlook.
Jeden Monat 300 Mails händisch zu verschicken würde mich glaube ich an den Rand des Wahnsinns treiben. Genauso wie ein Zwischendialog zum Bestätigen eher nicht so gut wäre.

Vielen Dank für jede Hilfe bereits vorab.

Gruß Toto

  

Betrifft: AW: Mailversand per VBA von: Martin
Geschrieben am: 25.09.2014 01:04:33

Hallo Toto,

im Grunde hört sich dein Anliegen nicht sehr kompliziert an. Outlook kann per VBA über die Objektbibliothek sogar ziemlich einfach angesprochen werden, aber das hast du ja scheinbar bereits herausgefunden. Der von dir angesprochene Dialog ist eine Sicherheitsbarriere, um dem Massenversand von SPAM-Mails Einhalt zu gebieten. Da gibt es aber Tools, die das Problem für dich lösen können (siehe http://www.heise.de/download/clickyes-pro-1136498.html).

Hier noch ein Makro zum Auslesen aller Exceldateien eines Ordners:

Sub ReadDirectory()
    Dim strFile As String
    strFile = Dir("C:\Test\*.xlsx") 'Ordner und evtl. Dateityp anpassen
    Do Until strFile = ""
        Debug.Print strFile
        strFile = Dir()
    Loop
End Sub
Du musst also nur noch die benötigten Zellen aus den per ReadDirectory ermittelten Excel-Dateien auslesen und in deinen Code zum Email-Versand einsetzen.

Viele Grüße

Martin


  

Betrifft: AW: Mailversand per VBA von: Toto
Geschrieben am: 28.09.2014 17:49:59



Hallo Martin,

Vorweg danke für deine Hilfe, konnte das Ganze doch noch wider Erwarten lösen. Sicher nicht perfekt aber es ist doch zufriedenstellend und funktioniert. Und irgendwann werde ich solche Dinge hoffenlich auch besser lösen können, stehe ja noch am Anfang mit VBA :-). Leider muss ich bei jeder Mail noch bei Outlook den Versand zulassen aber solche Tools wie du sie empfohlen hast (auch wenn sicher gut) darf ich kaum installieren in der Arbeit.

Hier mal meine Variante falls noch jemand Verbesserungsvorschläge hat (Beispielsweise ob es bei SendMail auch die Möglichkeit gibt einen Nachrichtentext einzugeben):

Sub versand()

Dim pfad As String
Dim dateipfad As String
    
pfad = Cells(1, 2).Value & "\"
datei = Dir(pfad & "*.xlsx")
    
    Do While datei <> ""
        Workbooks.Open (pfad & datei)
        ActiveWorkbook.SendMail Cells(1, 1).Value, "Anbei erhalten Sie die aktuelle Übersicht  _
September 2014"
        ActiveWorkbook.Close

        'nächste Datei lesen
        datei = Dir
    Loop

End Sub
Gruß Toto


 

Beiträge aus den Excel-Beispielen zum Thema "Mailversand per VBA"