Sända flera e-post med en sammanfattningsrapport och unika arbetsblad till flera mottagare
I detta tips demonstreras hur vi kan skicka separata e-post till enskilda mottagare, innehållande en gemensam rapport men med skilda underrapporter (arbetsblad) i en och samma procedur.
Här använder vi oss av "early binding" varför vi måste sätta en referens till MS Outlook Object Library x.x via Verktyg | Referenser... i VB-editorn.
Option Explicit
Sub Skicka_Arbetsblad_WordRapport_Flera_Mottagare()
'© 2003 Alla rättigheter XL-Dennis
Dim wbBok As Workbook
Dim wsBlad As Worksheet
Dim rnMottagare As Range, rnArbetsblad As Range
Dim stNamn As String
Dim i As Long
Dim olApp As Outlook.Application
Dim olNewMail As Outlook.MailItem
Set olApp = New Outlook.Application
Set wbBok = ThisWorkbook
Set wsBlad = wbBok.Worksheets("Blad1")
With wsBlad
'Lista över e-postmottagare, såsom "xxxx@xldennis.com"
Set rnMottagare = .Range("rnMottagare")
'Lista över arbetsbladens namn.
Set rnArbetsblad = .Range("rnArbetsblad")
End With
Application.ScreenUpdating = False
'Här skapas varje e-post och där Word-filen "Rapport.doc" bifogas
'men där unika arbetsblad skickas till respektive mottagare.
For i = 1 To rnMottagare.Count
Set olNewMail = CreateItem(olMailItem)
With olNewMail
.Recipients.Add rnMottagare(i, 1).Value
.Subject = "Ärende: Veckorapport"
.Body = "Enligt överenskommelse //Dennis"
With .Attachments
.Add ThisWorkbook.Path & "\" & "Rapport.doc"
.Item(1).DisplayName = "Sammanfattning"
stNamn = rnArbetsblad(i, 1).Value
'Skapar en ny arbetsbok.
wbBok.Worksheets(stNamn).Copy
'Omvandlar formler till konstanta värden.
With ActiveSheet.UsedRange
.Copy
.PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False
'Sparar den skapade arbetsboken och stänger den.
With ActiveWorkbook
.SaveAs Filename:=stNamn & ".xls"
.Close
End With
.Add ThisWorkbook.Path & "\" & stNamn & ".xls"
.Item(2).DisplayName = "Månadsresultat"
End With
.Save
.Send
End With
Next i
Set olNewMail = Nothing
Set olApp = Nothing
'Ta bort de skapade arbetsböckerna.
For i = 1 To rnMottagare.Count
Kill ThisWorkbook.Path & "\" & rnArbetsblad(i, 1).Value & ".xls"
Next i
Application.ScreenUpdating = True
End Sub