Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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 - Tabelle als PDF an mehrere in BCC

VBA - Tabelle als PDF an mehrere in BCC
13.05.2020 14:40:13
Markus
Hallo zusammen,
ich habe mit Hilfe diverser Foren, auch hier ein VBA gebaut, dass eine PDF erzeugt und diese als Anlage in eine Mail einfügt. Leider kann ich in dem Code nur einen Hauptemfänger z. B. aus einer Zelle und einen Empfänger in BCC aus einer Zelle einfügen.
Ich hätte gerne, dass es einen Hauptempfänger gibt und aus einer Liste aus einem anderen Tabellenblatt dann mehrere Empfänger in BCC eingefügt werden. Dabei soll unterschieden werden, ob der Empfänger die PDF täglich, wöchentlich (Mittwoch) oder Monatlich (erster Arbeitstag des Monats) erhält.
Geht das überhaupt?
Hier der verwendete Code:
'**********************************************
Option Explicit
Const MyPath As String = "C:\temp\"
Sub SendSheetAsPDF()
Dim MailTo As String
Dim MailBCC As String
Dim MailSubject As String
Dim MailText As String
MailTo = ActiveSheet.Range("Q2").Value
MailBCC = ActiveSheet.Range("Q3").Value
MailSubject = ActiveWorkbook.Name & " " & Format(Date, "DD.MMM.YYYY")
MailText = "Hallo Welt, (br) hier ist eine Datei!" 'HTML! die (br) gegen HTML-Zeilenumbruch _
tauschen
Call SendSheetOutlook(MailSubject, MailTo, MailBCC, MailText)
End Sub
'***************************************************************************
'Makro to send Excel-Sheet directly with outlook
'April 2013 by Klaus M.vdT.
'MODIFIED June 2013: Send pdf, not xlsx!
'original Code by mumpel / www.herber.de / 11.04.2013 11:23:25
'https:\/\/www.herber.de/forum/messages/1308295.html
'***************************************************************************
Private Sub SendSheetOutlook(sSubject As String, sTo As String, sBCC As String, sText As String) _
Dim olApp         As Object
Dim AWS           As String
Dim olOldBody     As String
'define temporary Path and Filename
AWS = MyPath & "\" & Format(Date, "YYYYMMDD") & "_" & Format(Time, "hhmmss") & "_" & _
WorksheetFunction.Substitute(ActiveWorkbook.Name, ".xlsm", "")
'export File as PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=AWS, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
AWS = AWS & ".pdf"
'Make Email
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.GetInspector.Display
olOldBody = .htmlBody
.To = sTo
.bcc = sBCC
.Subject = sSubject
.htmlBody = sText & olOldBody
.Attachments.Add AWS
End With
'remove TEMP file
'wenn du das PDF behalten möchtest, diese Zeile auskommentieren!
'sonst wird das temporäre PDF wieder gelöscht
'Kill AWS
End Sub
Wäre super, wenn jemand eine tolle Idee hätte. Schon Mal vielen Dank. Sorry, besser bekomme ich das mit dem Code nicht dargestellt.
Gruß
Markus

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Tabelle als PDF an mehrere in BCC
13.05.2020 15:59:10
volti
Hallo Markus,
hier eine Idee, wie Du Dein Vorhaben umsetzen könntest:
Dein Makro habe ich nicht verändert. Du kannst die neue Funktion einfach dort einbauen.
.bcc = Get_BCC()
Und die Anpassung des Blattnamens nicht vergessen.
PS: In Deiner Liste wird erwartet in Spalte $A die eMail des Empfängers und in Spalte $B ein Kürzel für
t => täglich, w => Mittwochs, m => monatlich erster Montag
Abweichungen durch Feiertage wäre möglich, aber aufwändig...
Probiere es halt mal aus.
Code in die Zwischenablage
Function Get_BCC() As String
'Ermittelt die BCC-Empfänger aus einem Tabellenblatt
 Dim sCheck As String, iZeile As Long
 sCheck = "t"
 If Weekday(Date, 1) = 4 Then sCheck = sCheck & "w"
 If Weekday(Date) = 2 Then
  If Val(Left$(Date - 9, 2)) < 7 Then sCheck = sCheck & "m"
 End If
 With ThisWorkbook.Sheets("BCC-Liste")          'Tabellenblatt anpassen
    For iZeile = 2 To .UsedRange.Rows.Count
     If .Cells(iZeile, "A").Value <> "" Then
      If InStr(sCheck, .Cells(iZeile, "B").Value) > 0 Then
        Get_BCC = Get_BCC & .Cells(iZeile, "A").Value & ";"
      End If
     End If
    Next iZeile
 End With
 If Get_BCC <> "" Then Get_BCC = Left$(Get_BCC, Len(Get_BCC) - 1)
End Function
viele Grüße
Karl-Heinz

Anzeige
AW: VBA - Tabelle als PDF an mehrere in BCC
13.05.2020 19:09:54
volti
Hallo Markus,
hier noch ein Update. Der 1. Arbeitstag ist ja nicht immer Montags, da hatte ich ein Brett vor'm Kopf.
Code in die Zwischenablage
Function Get_BCC() As String
'Ermittelt die BCC-Empfänger aus einem Tabellenblatt
 Dim sCheck As String, iZeile As Long, i As Integer, Datum As Date
 Dim sFT As String
'Feiertage festlegen
 Const sFTs = "01.01,06.01,01.05.,03.10.,01.11.,"
 sCheck = "t"                                       'Jeden Tag
 If Weekday(Date, 1) = 4 Then sCheck = sCheck & "w" 'Mittwoch
 For i = 1 To 7
  Datum = CDate(Format$(i & Mid$(Date, 3), "dd.mm.yyyy"))
  sFT = Left$(Datum, 6) & ","
  If Weekday(Datum) <> 1 And Weekday(Datum) <> 7 And InStr(sFTs, sFT) = 0 Then
    If (Date) = Datum Then sCheck = sCheck & "m"    'Erster Arbeitstag
    Exit For
  End If
 Next i
 With ThisWorkbook.Sheets("BCC-Liste")              'Tabellenblatt anpassen
    For iZeile = 2 To .UsedRange.Rows.Count         'Alle Zeilen durchgehen
     If .Cells(iZeile, "A").Value <> "" Then        'Wert vorhanden?
      If InStr(sCheck, .Cells(iZeile, "B").Value) > 0 Then
        Get_BCC = Get_BCC & .Cells(iZeile, "A").Value & ";"
      End If
     End If
    Next iZeile
 End With
 If Get_BCC <> "" Then Get_BCC = Left$(Get_BCC, Len(Get_BCC) - 1)
End Function
viele Grüße
Karl-Heinz

Anzeige
AW: VBA - Tabelle als PDF an mehrere in BCC
14.05.2020 08:28:21
Markus
Hallo Karl-Heinz,
vielen Dank für die schnelle Reaktion.
Bitte entschuldige die blöde Frage aber an welcher Stelle setze ich deine Funktion ein. Am Ende oder ist es egal?
Gruß
Markus
AW: VBA - Tabelle als PDF an mehrere in BCC
14.05.2020 08:49:21
volti
Hi Markus,
die Funktion kannst Du hinsetzen, wo Du willst.
Setze sie einfach hinter/unter Deine Sub's im gleichen Modul.
Einbinden in Deine Mail-Sub wie schon gezeigt:
.bcc = Get_BCC()
viele Grüße
Karl-Heinz
AW: VBA - Tabelle als PDF an mehrere in BCC
14.05.2020 12:11:29
Markus
Hi Karl-Heinz,
ich konnte es jetzt einbauen und muss es mal über einen Monat testen.
Wenn ich noch eine Frage stellen könnte? Was müsste ich einfügen, um über ein anderes Postfach (Freigabe vorhanden) senden zu können?
Gruß
Markus
Anzeige
AW: VBA - Tabelle als PDF an mehrere in BCC
14.05.2020 12:53:23
volti
Hallo Markus,
hierfür bin ich jetzt kein Experte. Ich habe auch nur ein Postfach....
Ggf. mal nach SentOnBehalfOfName oder SendUsingAccount googlen.
Oder versuch einfach mal dieses hier (vor .Display setzen und Adresse anpassen):
.SentOnBehalfOfName = "Ich.Bins@t-online.de"
VG KH
AW: VBA - Tabelle als PDF an mehrere in BCC
14.05.2020 16:10:30
Markus
Hi Karl-Heinz,
dein Tip war genau richtig.
Ich habe das folgendermaßen gelöst (Kommentar Test):
Sub SendSheetAsPDF()
Dim emailAlias As String 'Test
Dim MailTo As String
Dim MailBCC As String
Dim MailSubject As String
Dim MailText As String
'Test
emailAlias = "mailadresse"
'Email Adresse an
MailTo = "mailadresse"
'BCC-Adressen: Funktion!
MailBCC = Get_BCC()
'Betreff:
MailSubject = "Test vom " & Format(Date, "DD. MMM YYYY")
'Standardtext, im Maildisplay noch änderbar
MailText = "Sehr geehrte Damen und Herren, 
dies ist ein Test." Call SendSheetOutlook(MailSubject, emailAlias, MailTo, MailBCC, MailText) 'Test End Sub

'***************************************************************************
'Makro to send Excel-Sheet directly with outlook
'April 2013 by Klaus M.vdT.
'MODIFIED June 2013: Send pdf, not xlsx!
'original Code by mumpel / www.herber.de / 11.04.2013 11:23:25
'https:\/\/www.herber.de/forum/messages/1308295.html
Private Sub SendSheetOutlook(sSubject As String, emailAlias As String, sTo As String, sBCC As  _
String, sText As String) 'Test
Dim olApp         As Object
Dim AWS           As String
Dim olOldBody     As String
'define temporary Path and Filename
AWS = MyPath & "\" & ActiveSheet.Name & "_" & Format(Date, "DDMMYYYY")
'export File as PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=AWS, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
AWS = AWS & ".pdf"
'Make Email
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.SentOnBehalfOfName = emailAlias 'Test
.GetInspector.Display
olOldBody = .htmlBody
.To = sTo
.bcc = sBCC
.Subject = sSubject
.htmlBody = sText & olOldBody
.Attachments.Add AWS
End With
'remove TEMP file
'wenn du das PDF behalten möchtest, diese Zeile auskommentieren!
'sonst wird das temporäre PDF wieder gelöscht
'Kill AWS
End Sub
Function Get_BCC() As String
'Ermittelt die BCC-Empfänger aus einem Tabellenblatt
Dim sCheck As String, iZeile As Long, i As Integer, Datum As Date
Dim sFT As String
'Feiertage festlegen
Const sFTs = "01.01,06.01,01.05.,03.10.,01.11.,"
sCheck = "t"                                       'Jeden Tag
If Weekday(Date, 1) = 4 Then sCheck = sCheck & "w" 'Mittwoch
For i = 1 To 7
Datum = CDate(Format$(i & Mid$(Date, 3), "dd.mm.yyyy"))
sFT = Left$(Datum, 6) & ","
If Weekday(Datum)  1 And Weekday(Datum)  7 And InStr(sFTs, sFT) = 0 Then
If (Date) = Datum Then sCheck = sCheck & "m"    'Erster Arbeitstag
Exit For
End If
Next i
With ThisWorkbook.Sheets("Liste")              'Tabellenblatt anpassen
For iZeile = 2 To .UsedRange.Rows.Count         'Alle Zeilen durchgehen
If .Cells(iZeile, "A").Value  "" Then        'Wert vorhanden?
If InStr(sCheck, .Cells(iZeile, "B").Value) > 0 Then
Get_BCC = Get_BCC & .Cells(iZeile, "A").Value & ";"
End If
End If
Next iZeile
End With
If Get_BCC  "" Then Get_BCC = Left$(Get_BCC, Len(Get_BCC) - 1)
End Function
Damit ist der Code auch für andere Nutzer vollständig.
Nochmals vielen herzlichen Dank Karl-Heinz. Du hast mir den Tag gerettet!
Gruß
Markus
Anzeige

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige