Anzeige
Archiv - Navigation
1900to1904
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
Inhaltsverzeichnis

VBA Mail Send

VBA Mail Send
04.10.2022 19:35:53
Giuppy
Hallo
ich möchte verschieden mail mit Anhang mit ein VBA verschicken.
Wenn ich der einzeln code durchführe funktioniert aber wenn ich zusammen verschicken will bleibt (an bei 3_Mail_T) .Send stelle hängen
Kann mir jemand helfen
Anbei den VBA

Sub MAIL_ALL_TEST()
'Application.ScreenUpdating = False
Sheets("Kontrolle").Select
If Range("E2") = "RECH. KONTROLLIEREN" Then   ' Kontrolle
MsgBox "Bitte RECHNUNGEN KONTROLLIEREN."
Else
If Range("B2") > 0 Then
Call 2_Mail_T
If Range("B3") > 0 Then
Call 3_mail_T
If Range("B4") > 0 Then
Call 4_Mail_T
If Range("B5") > 0 Then
Call 5_Mail_T
If Range("B6") > 0 Then
Call 6_Mail_T
If Range("B7") > 0 Then
Call 7_Mail_T
If Range("B8") > 0 Then
Call 8_Mail_T
If Range("B9") > 0 Then
Call 9_Mail_T
If Range("B10") > 0 Then
Call 10_Mail_T
If Range("B11") > 0 Then
Call 11_Mail_T
If Range("B12") > 0 Then
Call 12_Mail_T
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Range("H11").Select
End Sub

Sub 2_Mail_T()
Sheets("Kontrolle").Select
Dim Nachricht As Object, OutlookApplication As Object
Set OutlookApplication = CreateObject("Outlook.Application")
Dim Anhang As String
Dim Betreff As String
Dim Mailtext As String
Dim strSignature As String
Dim StrPath As String, StrFile As String
Sheets("Kontrolle").Select
Range("G2").Select
NamDat = Range("H6")
Betreff = "2_" & NamDat
StrPath = "C:\#KDFatture\MAIL_NEW\PDF\2_PDF\"
Set Nachricht = OutlookApplication.CreateItem(0)
Mailtext = "

" & _ "Sehr geehrte Damen und Herren ," & "
" & "anbei sende ich Ihnen die Rechnungen für den Zeitraum " & NamDat & "
" & _ "Gerne stehen wir aus xxx Ihnen für evtl. weitere Rückfragen zur Verfügung." & "
" & "

" With Nachricht .GetInspector strSignature = "
" & .HTMLBody .To = "xxx@outlook.com" .Subject = Betreff StrFile = Dir(StrPath & "*.*") Do While Len(StrFile) > 0 .attachments.Add StrPath & StrFile StrFile = Dir Loop .HTMLBody = Mailtext & strSignature '.display .Send End With Set OutlookApplication = Nothing Set Nachricht = Nothing 'End If End Sub

Sub 3_mail_T()
Sheets("Kontrolle").Select
Range("G3").Select
Dim Nachricht As Object, OutlookApplication As Object
Set OutlookApplication = CreateObject("Outlook.Application")
Dim Anhang As String
Dim Betreff As String
Dim Mailtext As String
Dim strSignature As String
Sheets("Kontrolle").Select
NamDat = Range("H6")
Betreff = "3_" & NamDat
StrPath = "C:\#KDFatture\MAIL_NEW\PDF\3_PDF\"
Set Nachricht = OutlookApplication.CreateItem(0)
Mailtext = "

" & _ "Sehr geehrte Damen und Herren ," & "
" & "anbei sende ich Ihnen die Rechnungen für den Zeitraum " & NamDat & "
" & _ "Gerne stehen wir aus xxx Ihnen für evtl. weitere Rückfragen zur Verfügung." & "
" & "

" With Nachricht .GetInspector strSignature = "
" & .HTMLBody .To = "xxx@outlook.com" .Subject = Betreff StrFile = Dir(StrPath & "*.*") Do While Len(StrFile) > 0 .attachments.Add StrPath & StrFile StrFile = Dir Loop .HTMLBody = Mailtext & strSignature '.display .Send End With Set OutlookApplication = Nothing Set Nachricht = Nothing End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA Mail Send hintereinander
05.10.2022 11:44:44
Giuppy
Hallo,
ich habe die vba code geändert es funktioniert bis B10 bei B11 bleib an .send hängen
wie kann man die test file in forum hochladen
Vg
Giuppy
KD Rech 5 Betrag 16.349,13
1 16 10.487,04
2 5 1.920,51
3 0 0,00
4 16 2.090,12
5 13 1.732,68
6 0 0,00
7 0 0,00
8 0 0,00
9 0 0,00
10 1 118,78
11 0 0,00

Sub MAIL_ALL_TEST()
'Application.ScreenUpdating = False
Sheets("Kontrolle").Select
If Range("E2") = "RECH. KONTROLLIEREN" Then   ' Kontrolle
MsgBox "Bitte RECHNUNGEN KONTROLLIEREN."
Else
If Range("B2") > 0 Then
Call B2_Mail_T
Else
End If
If Range("B3") > 0 Then
Call B3_mail_T
Else
End If
If Range("B4") > 0 Then
Call B4_Mail_T
Else
End If
If Range("B5") > 0 Then
Call B5_Mail_T
Else
End If
If Range("B6") > 0 Then
Call B6_Mail_T
Else
End If
If Range("B7") > 0 Then
Call B7_Mail_T
Else
End If
If Range("B8") > 0 Then
Call B8_Mail_T
Else
End If
If Range("B9") > 0 Then
Call B9_Mail_T
Else
End If
If Range("B10") > 0 Then
Call B10_Mail_T
Else
End If
If Range("B11") > 0 Then
Call B11_Mail_T
Else
End If
If Range("B12") > 0 Then
Call B12_Mail_T
End If
End If
Range("H11").Select
End Sub

Anzeige
Frage ist noch offen
05.10.2022 16:55:33
Yal
Hallo Guippy,
durch deinen Nachtrag sieht deine Frage wie bereit genatwortet aus. Setzt den Haken bei "Frage noch offen", um die notwendige Aufmerksamkeit zu haben.
VG
Yal
AW: VBA Mail Send hintereinander
05.10.2022 22:41:30
Yal
Hallo Giuppy,
eigentlich keine Ahnung, warum es dann nicht mehr geht.
Ein paar Tipps:
_ in VB-Editor unter Extras, Verweise kannst Du die "Microsoft Outlook 19.0 Object Library" anhaken und somit u.a. den Intellisense (Strg+Leertaste) zur Seite haben, wenn Du etwas von Outlook programmierst. Die Variablen sind nicht mehr "As Object" sondern "As Outlook.Application" und "As MailItem"
_ mit einem Procedure-Parameter kannst Du die Zeilnummer übergeben, die Du gerade bearbeitest. Somit vermeidest den sogenannte "Spaghetti-Code"
_ deine Prüfung auf "RECH. KONTROLLIEREN" setzt voraus, dass exakt genau diesen Text drin steht (sogar Case-sensitive). Das ist wackelig. Besonders wenn dahinter den Versand von Rechnung an Kunden anstehen! Lieber blockieren, wenn irgendwas in E2 vorliegt.
_ Wenn in H6 den "Zeitraum" steht, warum heisst die Variable "NamDat"
_ soviele Variable wie nötig, aber so wenig wie möglich (wobei im Anfänger-Stadium lieber ein Bischen mehr, um diese im Lokalfenster anzuschauen, wenn der Code im Schrittmodus läuft).
Von deinem Code bleibt nur soviel übrig:

Sub MAIL_ALL_TEST()
'Application.ScreenUpdating = False
Dim Z As Range 'Z wie Zelle
Sheets("Kontrolle").Select
If Range("E2")  "" Then   ' Kontrolle
MsgBox "Bitte RECHNUNGEN KONTROLLIEREN."
Else
For Each Z In Range(Range("B2"), Cells(Rows.Count, 2).End(xlUp))
If Z.Value  0 Then MailenNachZeilen Z.Row, Range("H6").Value
Next
End If
Range("H11").Select
End Sub
Sub MailenNachZeilen(ZeileNr As Long, Zeitraum as String)
Dim OutlookApplication As New Outlook.Application
Dim Nachricht As New MailItem
Dim Mailtext As String
Dim strPath As String
Dim strFile As String
strPath = "C:\#KDFatture\MAIL_NEW\PDF\B" & ZeileNr & "_PDF\"
Mailtext = "<p style='font-family:Georgia; font-size:10pt;'>" _
& "Sehr geehrte Damen und Herren ," & "<br><br>" _
& "anbei sende ich Ihnen die Rechnungen für den Zeitraum " & Zeitraum & "<br><br>" _
& "Gerne stehen wir aus Oberhaching Ihnen für evtl. weitere Rückfragen zur Verfügung." & "<br><br>" & "</p>"
With Nachricht
.GetInspector
.To = "giuppy@gmx.de"
.Subject = "B" & ZeileNr & "_" & Zeitraum
.HTMLBody = Mailtext & "<br>" & .HTMLBody
'.attachments.Add Anhang
strFile = Dir(strPath & "*.*")
Do While Len(strFile) > 0
.attachments.Add strPath & strFile
strFile = Dir
Loop
'.display
.Send
End With
Set OutlookApplication = Nothing
Set Nachricht = Nothing
End Sub
VG
Yal
Anzeige
VBA Mail Send hintereinander
06.10.2022 07:28:15
Giuppy
Hallo yal
Vielen Dank
Ich werde ausprobieren
Leider sehe schon einige kritische Sachen.
In der Subjekt habe ich B2 usw aus Schutz geschrieben eigentlich sollte der Kundename welche an der Zelle b2 usw eingetragen ist.
Ich habe nur aus test Grunde nur meine mailadresse geschrieben aber jede Kunde hat ein anderes mailadresse.
Vielleicht man konnte die mailadresse aus ein andere Zelle übernehmen z.b M2 usw.
Der Verweis in der library war schon vorhanden.
PS wenn statt .send .Display steht funktioniert nur muss ich für jede Mail der Button senden drucken muss.
Vg
GIUPPY
Anzeige
AW: VBA Mail Send hintereinander
06.10.2022 08:29:30
Yal
Hallo Giuppy,
kurze, kritische Nachfrage(ich brauche selber die Antwort nicht):
willst Du tatsächlich, mit deinem aktuellen Programmier-Kompetenz, dich auf eine Bastelei verlassen, um Mails beinah unkontrolliert in die Welt zu versenden, mit alle Risiken, die damit verbunden sind (u.a. Rechnung eines Kunden einen anderen gesendet)?
Die Schäden (Vertrauensverlust) könnten enorm werden.
Höchstens als Mailvorbereitung, also bis zu Display, aber kein Send. Aber aus Menschenkenntnis: der anschließende Kontrolle wird irgendwann lückenhaft sein.
(Übrigens: Du hattest den nicht-Test-Modul löschen sollen. Ganz schön viele Kunden-Email darin)
Aus
.Subject = "B" & ZeileNr & "_" & Zeitraum
Machst Du
.Subject = Range("B" & ZeileNr).Value & "_" & Zeitraum
Das ist doch klar.
VG
Yal
Anzeige
AW: VBA Mail Send hintereinander
06.10.2022 10:21:50
Giuppy
Hallo YAL,
grazie :-)
ich werde ausprobieren.
auch der Strpath sollte geändert werden
'strPath = "C:\#KDFatture\MAIL_NEW\PDF\B" & ZeileNr & "_PDF\"
'strPath = "C:\#KDFatture\MAIL_NEW\PDF\"& Range("A" & ZeileNr).Value &"_PDF\"
Wie kann ich mehrere mailadresse in der schleife bringen?
z.B.
Kunden B2 die mailadresse xxxx@xxx dann .to ="xxx@xxx"
Kunden B3 die mailadresse yyy@yyy dann .to ="yyy@yyy"
Kunden B4 die mailadresse zzz@zzz dann .to ="zzz@zzz"
usw
Die mailadresse konnte ich in der Spalte O schreiben
Falls der Kunden in A2 Rechnungen hat ( große 0 in B2) dann mail senden (Adresse ist in O2 geschrieben)
Jeder Kunden hat ein Separat Ordner z.B. Name der Kunden (A2)_PDF in dem werden mit ein anderem VBA die Rechnungen kopiert ( habe schon getestet und funktioniert)
Schöne Grüße
Giuppy
Anzeige
AW: VBA Mail Send hintereinander
06.10.2022 11:52:18
Giuppy
Hallo YAL,
leider bleibt hängen bei
Dim Nachricht As New MailItem - ich habe probiert mit Dim Nachricht As MailItem
dann bleibt hängen bei .GetInspector -ich habe ein ' gesetzt
dann bleibt hängen auch bei .to = "giuppy@gmx.de"
Ich habe probiert
Dim empfänger As String
empfänger = Range("O" & ZeileNr).Value
wird korrekt angezeigt empfänger ="giuppy@gmx.de" aber wenn ich beim .To = empfänger schreibe bleibt hängen
Kannst du mir erklären wie wird die Zeitraum definiert ? ,Range("H6").Value
auch ohne Dim Zeitraum as String - Zeitraum = Range("H6) wird korrekt angezeigt bei
anbei sende ich Ihnen die Rechnungen für den Zeitraum " & Zeitraum & "
" _
Viele Grüße
Giuppy

Sub MAIL_Schleife_TEST()
'Application.ScreenUpdating = False
Dim Z As Range 'Z wie Zelle
Sheets("Kontrolle").Select
If Range("E2")  "OK" Then   ' Kontrolle
MsgBox "Bitte RECHNUNGEN KONTROLLIEREN."
Else
For Each Z In Range(Range("B2"), Cells(Rows.Count, 2).End(xlUp))
If Z.Value  0 Then MailenNachZeilen Z.Row, Range("H6").Value
Next
End If
Range("H11").Select
End Sub

Sub MailenNachZeilen(ZeileNr As Long, Zeitraum As String)
Dim OutlookApplication As New Outlook.Application
'Dim Nachricht As New MailItem
Dim Nachricht As MailItem
Dim Mailtext As String
Dim strPath As String
Dim strFile As String
Dim empfänger As String
Dim Betreff As String
Zeitraum = Range("H6")
empfänger = Range("O" & ZeileNr).Value
Betreff = Range("A" & ZeileNr).Value & "_" & Zeitraum
strPath = "C:\#KDFatture\MAIL_NEW\PDF\" & Range("A" & ZeileNr).Value & "_PDF\"
Mailtext = "

" _ & "Sehr geehrte Damen und Herren ," & "
" _ & "anbei sende ich Ihnen die Rechnungen für den Zeitraum " & Zeitraum & "
" _ & "Gerne stehen wir aus Oberhaching Ihnen für evtl. weitere Rückfragen zur Verfügung." & "
" & "

" With Nachricht '.GetInspector .To = empfänger .CC = "giuppy@gmx.de" Subject = Betreff .HTMLBody = Mailtext & "
" & .HTMLBody '.attachments.Add Anhang strFile = Dir(strPath & "*.*") Do While Len(strFile) > 0 .attachments.Add strPath & strFile strFile = Dir Loop .display '.Send End With Set OutlookApplication = Nothing Set Nachricht = Nothing End Sub

Anzeige
AW: VBA Mail Send hintereinander
07.10.2022 14:32:28
Giuppy
Hallo YAL,
ich habe geschäfft die schleife anzupassen :-)
Leider beim senden der Mails flatter der Bilschirm und ich weiß es nicht wie ich abstellen kann.
Mit Application.ScreenUpdating = False funktioniert nicht.
Sehr wahrscheinlich muss man den code .GetInspector.Display ändern ( nur . GetInspector bleibt hängen)
With OutEmail
.GetInspector.Display ?
olOldbody = .HTMLBody
der Code olOldbody = .HTMLBody habe ich benutzt um die Signatur einzufügen ohne diese Code funktioniert ohne Flattern aber die Signatur wird in der Mail nicht eingefügt
PS meine alte Code funktioniert man muss nur beide varianten .display und auch .send aktivieren aber die Schleife ist viel besser
Schöne Grüße
Giuppy

Sub MAIL_Schleife_TEST1()
Application.ScreenUpdating = False
Dim Z As Range 'Z wie Zelle
Sheets("Kontrolle").Select
If Range("E2")  "OK" Then   ' Kontrolle
MsgBox "Bitte RECHNUNGEN KONTROLLIEREN."
Else
For Each Z In Range(Range("B2"), Cells(Rows.Count, 2).End(xlUp))
If Z.Value  0 Then MailenNachZeilen Z.Row, Range("H6").Value
Next
End If
Range("H11").Select
End Sub

Sub MailenNachZeilen(ZeileNr As Long, Zeitraum As String)
Application.ScreenUpdating = False
Dim OutApp As Outlook.Application
Dim OutEmail As Outlook.MailItem
'Eine neue Instanz von Outlook erzeugen
Set OutApp = New Outlook.Application
Set OutEmail = OutApp.CreateItem(olMailItem)
Dim Mailtext As String
Dim strPath As String
Dim strFile As String
Dim empfänger As String
Dim Betreff As String
'Zeitraum = Range("H6")
empfänger = Range("O" & ZeileNr).Value
Betreff = Range("A" & ZeileNr).Value & "_" & Zeitraum
strPath = "C:\#KDFatture\MAIL_NEW\PDF\" & Range("A" & ZeileNr).Value & "_PDF\"
Mailtext = "

" _ & "Sehr geehrte Damen und Herren ," & "
" _ & "anbei sende ich Ihnen die Rechnungen für den Zeitraum " & Zeitraum & "
" _ & "Gerne stehen wir aus Oberhaching Ihnen für evtl. weitere Rückfragen zur Verfügung." & "
" & "

" With OutEmail .GetInspector.Display olOldbody = .HTMLBody '.GetInspector .To = empfänger '.CC = "" OutEmail.Subject = Betreff .HTMLBody = Mailtext & olOldbody strFile = Dir(strPath & "*.*") Do While Len(strFile) > 0 .attachments.Add strPath & strFile strFile = Dir Loop '.display .Send End With Set OutlookApplication = Nothing Set Nachricht = Nothing End Sub

Anzeige
AW: VBA Mail Send hintereinander
07.10.2022 17:12:46
Yal
Hallo Giuppy,
sende dafür eine Mail an Hans. Adresse findest Du im Impressum.
VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige