mike89

VBA Exceldatei nach Speichern Schließen automatisch versenden per Mail

Guten Tag,

Ich benötige einen Code zum Senden einer Datei nachdem ich diese gespeichert habe. Bisher ist es mir nur gelungen jemanden zu benachrichtigen per Makro. Ich möchte aber dass sich die Datei auch anhängt da es Benutzer gibt die keinen Zugriff auf die Datei haben (extern).

Vielen Dank im Voraus für die Hilfe face-smile

lg Mike89
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 285104

Url: https://administrator.de/forum/vba-exceldatei-nach-speichern-schliessen-automatisch-versenden-per-mail-285104.html

Ausgedruckt am: 22.05.2025 um 04:05 Uhr

122990
122990 09.10.2015 aktualisiert um 10:02:25 Uhr
Goto Top
Moin,
Suchfunktion benutzen:
Daten aus Excel Datei per VB Script versenden.

Gruß grexit
Mike89
Mike89 09.10.2015 um 11:13:22 Uhr
Goto Top
Guten Morgen,

Danke für die Info! Habe die Beiträge geprüft komme aber nicht ganz auf einen Code der genau in mein Schema passt .

Grundsätzlich geht es um Speichern unter + Sende die Datei als Anhang an folgende E-Mailadressen (inkl. Text)

Bisher kam ich nur auf folgende Lösung - hier wird allerdings lediglich Bescheid gegeben, dass die Datei aktuell ist.

Sub Speichern unter und Senden ()
ActiveWorkbook.SaveAs Filename:= _
"V:\Test.xlsm" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

Set olAppication = CreateObject("Outlook.Application")
Set objEMail = olAppication.CreateItem(olMailItem)
Application.Wait Now + TimeSerial(0, 0, 5)
With objEMail
.To = "E-Mailadresse" 'E-Mail Adresse des Empfängers eintragen'
.Subject = "Neue Auswertung!" 'der Text der in der Betreffzeile in der E-Mail stehen soll'
.Body = "Anbei die aktuelle Auswertung" 'der Text im E-Mailtext erscheinen soll'
.Display
End With
SendKeys "%s", True
SendKeys "^{ENTER}", True

Set objEMail = Nothing
End Sub
colinardo
colinardo 09.10.2015 aktualisiert um 12:07:48 Uhr
Goto Top
Hallo Mike89,
da hast du mehrere Möglichkeiten.

Die simpelste sieht so aus:
(Diese hat aber nur begrenzte Möglichkeiten der Anpassung, ist aber schnell geschrieben)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ActiveWorkbook.SendMail "user@domain.de", "Test"  
End Sub
Die zweite für dich vermutlich eher passende sieht so aus:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ActiveWorkbook.Save
    email "user@domain.de", "TestSubject", "Das ist mein Body", Array(ActiveWorkbook.FullName)  
End Sub

Function email(sMailto, sSubject, sBodyText, arrAttachments)
    On Error Resume Next
    Set objOutlook = GetObject("", "Outlook.Application")  
    If objOutlook Is Nothing Then
    Set objOutlook = CreateObject("Outlook.Application")  
    End If
    Set objMail = objOutlook.CreateItem(0)
    If Not objMail Is Nothing Then
        With objMail
            .To = sMailto
            .Subject = sSubject
            .Body = sBodyText
            If UBound(arrAttachments) <> -1 Then
                For i = 0 To UBound(arrAttachments)
                    .Attachments.Add arrAttachments(i)
                Next
            End If
            .Send
        End With
    End If
    Set objOutlook = Nothing
End Function
WICHTIG: Der Code gehört in den Abschnitt ThisWorkbook oder DieseArbeitsmappe, weil das BeforeClose-Event nur dort reagiert, wenn die Mappe geschlossen wird!

Grüße Uwe
colinardo
colinardo 30.12.2015 um 20:06:11 Uhr
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.

Guten Rutsch.