Thanks Mike, I got it with a bit of tweeking.
Regards
Mark
"Mike H" wrote:
> Hi,
>
> It's not very elegant and I'm sure Ron De Bruin has a better solution but
> this should work
>
> Sub Mail_ActiveSheet()
> 'Working in 2000-2010
> Dim FileExtStr As String
> Dim FileFormatNum As Long
> Dim Sourcewb As Workbook
> Dim Destwb As Workbook
> Dim TempFilePath As String
> Dim TempFileName As String
> Dim OutApp As Object
> Dim OutMail As Object
> Dim SndNames As String
>
> With Application
> .ScreenUpdating = False
> .EnableEvents = False
> End With
>
> Set Sourcewb = ActiveWorkbook
>
> 'Copy the sheet to a new workbook
> ActiveSheet.Copy
> Set Destwb = ActiveWorkbook
>
> 'Determine the Excel version and file extension/format
> With Destwb
> If Val(Application.Version) < 12 Then
> 'You use Excel 97-2003
> FileExtStr = ".xls": FileFormatNum = -4143
> Else
> 'You use Excel 2007-2010
> 'We exit the sub when your answer is NO in the security dialog
> that you only
> 'see when you copy a sheet from a xlsm file with macro's
> disabled.
> If Sourcewb.Name = .Name Then
> With Application
> .ScreenUpdating = True
> .EnableEvents = True
> End With
> MsgBox "Your answer is NO in the security dialog"
> Exit Sub
> Else
> Select Case Sourcewb.FileFormat
> Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
> Case 52:
> If .HasVBProject Then
> FileExtStr = ".xlsm": FileFormatNum = 52
> Else
> FileExtStr = ".xlsx": FileFormatNum = 51
> End If
> Case 56: FileExtStr = ".xls": FileFormatNum = 56
> Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
> End Select
> End If
> End If
> End With
>
> ' 'Change all cells in the worksheet to values if you want
> ' With Destwb.Sheets(1).UsedRange
> ' .Cells.Copy
> ' .Cells.PasteSpecial xlPasteValues
> ' .Cells(1).Select
> ' End With
> ' Application.CutCopyMode = False
>
> 'Save the new workbook/Mail it/Delete it
> TempFilePath = Environ$("temp") & "\"
> TempFileName = "Low Consumables of " & Sourcewb.Name & " " & Format(Now,
> "dd-mmm-yy")
>
> Set OutApp = CreateObject("Outlook.Application")
> Set OutMail = OutApp.CreateItem(0)
> 'Build string of names
>
> For Each c In Sourcewb.Sheets("sheet3").Range("A1:A10")
> SndNames = SndNames & c.Value & ","
> Next
> SndNames = Left(SndNames, Len(SndNames) - 1)
> With Destwb
> .SaveAs TempFilePath & TempFileName & FileExtStr,
> FileFormat:=FileFormatNum
> On Error Resume Next
> With OutMail
> .To = SndNames
> .CC = ""
> .BCC = ""
> .Subject = "Low Consumables Order from Galashiels"
> .Body = "Dear Anne," & vbNewLine & "" & vbNewLine & "Please find
> attached order for low consumables from Galashiels." & vbNewLine & "" &
> vbNewLine & "Regards," & vbNewLine & "" & vbNewLine & "Gala AETL"
> .Attachments.Add Destwb.FullName
> 'You can add other files also like this
> '.Attachments.Add ("C:\test.txt")
> .Display 'or use .Send
> End With
> On Error GoTo 0
> .Close savechanges:=False
> End With
>
> 'Delete the file you have send
> Kill TempFilePath & TempFileName & FileExtStr
>
> Set OutMail = Nothing
> Set OutApp = Nothing
>
> With Application
> .ScreenUpdating = True
> .EnableEvents = True
> End With
> End Sub
> --
> Mike
>
> When competing hypotheses are otherwise equal, adopt the hypothesis that
> introduces the fewest assumptions while still sufficiently answering the
> question.
>
>
> "terilad" wrote:
>
> > How can I change the range in the macro below for sending email to recpients,
> > I want to change the range to sheet3 and email addresses that are input into
> > A1:A10.
> >
> > Here's the code:
> >
> > Sub Mail_ActiveSheet()
> > 'Working in 2000-2010
> > Dim FileExtStr As String
> > Dim FileFormatNum As Long
> > Dim Sourcewb As Workbook
> > Dim Destwb As Workbook
> > Dim TempFilePath As String
> > Dim TempFileName As String
> > Dim OutApp As Object
> > Dim OutMail As Object
> >
> > With Application
> > .ScreenUpdating = False
> > .EnableEvents = False
> > End With
> >
> > Set Sourcewb = ActiveWorkbook
> >
> > 'Copy the sheet to a new workbook
> > ActiveSheet.Copy
> > Set Destwb = ActiveWorkbook
> >
> > 'Determine the Excel version and file extension/format
> > With Destwb
> > If Val(Application.Version) < 12 Then
> > 'You use Excel 97-2003
> > FileExtStr = ".xls": FileFormatNum = -4143
> > Else
> > 'You use Excel 2007-2010
> > 'We exit the sub when your answer is NO in the security dialog
> > that you only
> > 'see when you copy a sheet from a xlsm file with macro's
> > disabled.
> > If Sourcewb.Name = .Name Then
> > With Application
> > .ScreenUpdating = True
> > .EnableEvents = True
> > End With
> > MsgBox "Your answer is NO in the security dialog"
> > Exit Sub
> > Else
> > Select Case Sourcewb.FileFormat
> > Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
> > Case 52:
> > If .HasVBProject Then
> > FileExtStr = ".xlsm": FileFormatNum = 52
> > Else
> > FileExtStr = ".xlsx": FileFormatNum = 51
> > End If
> > Case 56: FileExtStr = ".xls": FileFormatNum = 56
> > Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
> > End Select
> > End If
> > End If
> > End With
> >
> > ' 'Change all cells in the worksheet to values if you want
> > ' With Destwb.Sheets(1).UsedRange
> > ' .Cells.Copy
> > ' .Cells.PasteSpecial xlPasteValues
> > ' .Cells(1).Select
> > ' End With
> > ' Application.CutCopyMode = False
> >
> > 'Save the new workbook/Mail it/Delete it
> > TempFilePath = Environ$("temp") & "\"
> > TempFileName = "Low Consumables of " & Sourcewb.Name & " " & Format(Now,
> > "dd-mmm-yy")
> >
> > Set OutApp = CreateObject("Outlook.Application")
> > Set OutMail = OutApp.CreateItem(0)
> >
> > With Destwb
> > .SaveAs TempFilePath & TempFileName & FileExtStr,
> > FileFormat:=FileFormatNum
> > On Error Resume Next
> > With OutMail
> > .To = "(E-Mail Removed)"
> > .CC = ""
> > .BCC = ""
> > .Subject = "Low Consumables Order from Galashiels"
> > .Body = "Dear Anne," & vbNewLine & "" & vbNewLine & "Please find
> > attached order for low consumables from Galashiels." & vbNewLine & "" &
> > vbNewLine & "Regards," & vbNewLine & "" & vbNewLine & "Gala AETL"
> > .Attachments.Add Destwb.FullName
> > 'You can add other files also like this
> > '.Attachments.Add ("C:\test.txt")
> > .Display 'or use .Send
> > End With
> > On Error GoTo 0
> > .Close savechanges:=False
> > End With
> >
> > 'Delete the file you have send
> > Kill TempFilePath & TempFileName & FileExtStr
> >
> > Set OutMail = Nothing
> > Set OutApp = Nothing
> >
> > With Application
> > .ScreenUpdating = True
> > .EnableEvents = True
> > End With
> > End Sub
> >
> > Thanks
> >
> >
> > Mark
|