Sub EmailPivotSheets()
Dim WB As Workbook
Dim WS As Worksheet
Dim SendMail As Boolean
Dim DefaultAddress
Dim Month As String
Month = "August"
SendMail = False 'False means don't send emails
DefaultAddress = "xxx@yy.gov.uk"
Set WB = ActiveWorkbook 'WB therefore refers to the workbook active when macro initiated
For Each WS In ActiveWorkbook.Worksheets
Call Printsettings
WS.Copy 'creates separate workbook
'Then send it
sendto = MakeArrayOf(Range("B1").Value, ";")
EmailTitle = "Monitoring " + mymonth + WS.Name
'need to trap invalid email addresses
On Error GoTo ErrorHandler
If SendEmail Then ActiveWorkbook.SendMail _
Recipients:=sendto, _
Subject:=EmailTitle, _
RETURNRECEIPT:=True
On Error GoTo 0
'reset workbook ready for next loop
ActiveWorkbook.Close SaveChanges:=False
Next WS
Exit Sub
ErrorHandler:
MsgBox Prompt = "Sendmail failure for " + r.Value + ". Probably invalid email address " + SendTo + "sent to " + DefaultAddress
EmailTitle = "FAILED EMAIL CHECK EMAIL ADDRESS " + r.Value
r.Offset(0, 2).Value = "email failure"
sendto = DefaultAddress
ActiveWorkbook.SendMail Recipients:=sendto, Subject:=EmailTitle, RETURNRECEIPT:=True
Resume Next
End Sub
Public Function MakeArrayOf(StringList As String, _
Delimiter As String) As Variant
Dim sWork As String
Dim A() As String
Dim nIndex As Integer
Dim nPos As Integer
sWork = StringList
ReDim A(1)
nIndex = 0
nPos = InStr(sWork, Delimiter)
While nPos > 0
ReDim Preserve A(nIndex)
A(nIndex) = Left(sWork, nPos - 1)
sWork = Mid(sWork, nPos + 1, 999)
nIndex = nIndex + 1
nPos = InStr(sWork, Delimiter)
Wend
If Len(sWork) > 1 Then
ReDim Preserve A(nIndex)
A(nIndex) = sWork
End If
MakeArrayOf = A
End Function