Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
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

Excel-blätter per Makro versenden

Excel-blätter per Makro versenden
19.06.2021 21:12:41
Imzadi
Hallo Zusammen,
ich habe mir ein Mako zusammengestellt, mit dem ich einzelne Excelblätter an verschiedene Empfänger per Outlook versenden kann, was gut funktioniert.

Sub MailVersand()
Dim OL As Object
Dim IsCreated As Boolean
Dim Wb As Workbook
Dim aWb As Workbook
Dim Ws As Worksheet
Dim An As String
Dim Cc As String
Dim From As String
Dim Subject As String
Dim Dpfad As String
Dim Body As String
Dim clc
Set Wb = ThisWorkbook
With Application
clc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
On Error Resume Next
Set OL = GetObject(, "Outlook.Application")
If Err Then
Set OL = CreateObject("Outlook.Application")
IsCreated = True
End If
On Error GoTo 0
For Each Ws In Wb.Worksheets
Ws.Copy
Set aWb = ActiveWorkbook
aWb.SaveAs Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx"
Dpfad = aWb.FullName
An = aWb.Worksheets(1).Range("AB2").Value
Cc = aWb.Worksheets(1).Range("AF2").Value
Body = aWb.Worksheets(1).Range("AB5").Value
From = aWb.Worksheets(1).Range("AB4").Value
Subject = aWb.Worksheets(1).Range("AB3").Value
aWb.Close True
With OL.CreateItem(0)
.SentOnBehalfOfName = From
.To = An
.Cc = Cc
.Body = Body
.Subject = Subject
.Attachments.Add Dpfad
.Send
End With
Kill Dpfad
Set aWb = Nothing
Next
If IsCreated Then OL.Quit
With Application
.Calculation = cld
.ScreenUpdating = True
End With
Set OL = Nothing
Set Wb = Nothing
Set Ws = Nothing
End Sub
Ich scheitere nun daran, dass ich versuche dieses Makro so umstellen, dass die einzelnen Blätter nicht als Excel sondern als PDF gesendet werden.

Sub PDFMailVersand()
Dim OL As Object
Dim IsCreated As Boolean
Dim Wb As Workbook
Dim aWb As Workbook
Dim Ws As Worksheet
Dim An As String
Dim Cc As String
Dim From As String
Dim Subject As String
Dim Dpfad As String
Dim Body As String
Dim strDateiname As String
Dim clc
Set Wb = ThisWorkbook
With Application
clc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
On Error Resume Next
Set OL = GetObject(, "Outlook.Application")
If Err Then
Set OL = CreateObject("Outlook.Application")
IsCreated = True
End If
On Error GoTo 0
For Each Ws In Wb.Worksheets
Ws.Copy
Set aWb = ActiveWorkbook
strDateiname = ThisWorkbook.Path & "\" & ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strDateiname, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
An = aWb.Worksheets(1).Range("AB2").Value
Cc = aWb.Worksheets(1).Range("AF2").Value
Body = aWb.Worksheets(1).Range("AB5").Value
From = aWb.Worksheets(1).Range("AB4").Value
Subject = aWb.Worksheets(1).Range("AB3").Value
aWb.Close True
With OL.CreateItem(0)
.SentOnBehalfOfName = From
.To = An
.Cc = Cc
.Body = Body
.Subject = Subject
.Attachments.Add strDateiname
.Send
End With
Kill strDateiname
Set aWb = Nothing
Next
If IsCreated Then OL.Quit
With Application
.Calculation = cld
.ScreenUpdating = True
End With
Set OL = Nothing
Set Wb = Nothing
Set Ws = Nothing
End Sub
Hier werde ich nun bei jedem Blatt aufgefordet dieses in Excel zu speichern. Egal ob ich nun tatsächlich zwischenspeichere oder nicht, der Versand funktioniert. Aber ich will natürlich nicht bei jedem Blatt aktiv werden müssen. Was kann ich tun um dies abzustellen?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel-blätter per Makro versenden
19.06.2021 22:25:30
Dieter
Hallo Imzadi,
ich denke, wenn du die Schleife über die Tabellenblätter so schreibst, sollte das funktionieren:
Set Wb = ThisWorkbook
For Each Ws In Wb.Worksheets
strDateiname = ThisWorkbook.Path & "\" & Ws.Name & ".pdf"
Ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strDateiname, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
An = Ws.Range("AB2").Value
Cc = Ws.Range("AF2").Value
Body = Ws.Range("AB5").Value
From = Ws.Range("AB4").Value
Subject = Ws.Range("AB3").Value
With OL.CreateItem(0)
.SentOnBehalfOfName = From
.To = An
.Cc = Cc
.Body = Body
.Subject = Subject
.Attachments.Add strDateiname
.Send
End With
Kill strDateiname
Next Ws
Viele Grüße
Dieter
Anzeige
AW: Excel-blätter per Makro versenden
19.06.2021 22:33:54
Dieter
Hallo Imzadi,
so ist es wohl besser lesbar

Set Wb = ThisWorkbook
For Each Ws In Wb.Worksheets
strDateiname = ThisWorkbook.Path & "\" & Ws.Name & ".pdf"
Ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strDateiname, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
An = Ws.Range("AB2").Value
Cc = Ws.Range("AF2").Value
Body = Ws.Range("AB5").Value
From = Ws.Range("AB4").Value
Subject = Ws.Range("AB3").Value
With OL.CreateItem(0)
.SentOnBehalfOfName = From
.To = An
.Cc = Cc
.Body = Body
.Subject = Subject
.Attachments.Add strDateiname
.Send
End With
Kill strDateiname
Next Ws
Viele Grüße
Dieter
Anzeige
Excel-blätter per Makro versenden
19.06.2021 22:35:37
Imzadi
Wahnsinn, vielen Dank, es funktioniert. Gibt es noch einen Trick, dass die einzelnen Excelblätter die in PDF konvertiert werden geschlossen werden? Im Moment bleiben diese geöffnet.
Hier der neue Code:

Sub PDFMailVersand()
Dim OL As Object
Dim IsCreated As Boolean
Dim Wb As Workbook
Dim aWb As Workbook
Dim Ws As Worksheet
Dim An As String
Dim Cc As String
Dim From As String
Dim Subject As String
Dim Dpfad As String
Dim Body As String
Dim strDateiname As String
Dim clc
Set Wb = ThisWorkbook
With Application
clc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
On Error Resume Next
Set OL = GetObject(, "Outlook.Application")
If Err Then
Set OL = CreateObject("Outlook.Application")
IsCreated = True
End If
On Error GoTo 0
For Each Ws In Wb.Worksheets
Ws.Copy
Set Wb = ThisWorkbook
strDateiname = ThisWorkbook.Path & "\" & Ws.Name & ".pdf"
Ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strDateiname, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
An = Ws.Range("AB2").Value
Cc = Ws.Range("AF2").Value
Body = Ws.Range("AB5").Value
From = Ws.Range("AB4").Value
Subject = Ws.Range("AB3").Value
With OL.CreateItem(0)
.SentOnBehalfOfName = From
.To = An
.Cc = Cc
.Body = Body
.Subject = Subject
.Attachments.Add strDateiname
.Send
End With
Kill strDateiname
Next Ws
If IsCreated Then OL.Quit
With Application
.Calculation = cld
.ScreenUpdating = True
End With
Set OL = Nothing
Set Wb = Nothing
Set Ws = Nothing
End Sub

Anzeige
AW: Excel-blätter per Makro versenden
19.06.2021 23:19:07
Dieter
Hallo Imzadi,
lass das Statement "Ws.Copy" weg. Das wird jetzt nicht mehr gebraucht.
In der Schleife kannst du "Set Wb = ThisWorkbook" auch streichen, es reicht die Zuordnung im oberen Programmteil.
Viele Grüße
Dieter
Excel-blätter per Makro versenden
19.06.2021 23:36:52
Imzadi
Vielen Dank, funktioniert perfekt!
Für alle die dieses Makro nutzen wollen, es werden alle Excel Blätter in der Datei einzeln an Empfänger gesendet, die pro Blatt definiert sind.
Auf jedem Blatt muss folgende Information enthalten sein:
  • Absender (z.b. Anderes Postfach als das Standardpostfach)

  • Empfänger

  • Kopie

  • Betreff der Email

  • Email-Text

  • Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige