This site will look better if you upgrade to a browser that supports web standards.
You can send a workbook as an attachment using the menu command . This opens your default email program and, typically, attaches the file to a blank message. Unfortunately, there's no way to specify the recipient and subject, much less body text, using the menus.
In Windows version of XL, the VBA SendMail command can be used to send a workbook as an attachment without user input - the recipient and the subject can be provided as arguments to the SendMail method.
But for XL98/01/v.X/04, to quote MVP Bernard Rey, "SendMail simply DOES NOT work." Here are a couple of workarounds:
This technique, which I saw first published by MVP Jim Gordon, mimics the menu commands to open a blank message with the active workbook attached.
Public Sub SendMyMail()
With Application.CommandBars.Add
.Visible = False
.Controls.Add(Type:=msoControlButton, Id:=2188).Execute
.Delete
End With
End Sub
Bernard Rey, in a newsgroup article, provided an MacScript (AppleScript) substitute for VBA's SendMail, using Entourage. I've modified it a bit to take the workbook, recipient and subject as arguments
Public Sub ErageSendMail(theBook As Workbook, _
recipient As String, subject As String)
Dim mailStr As String
mailStr = _
"Tell application ""Microsoft Entourage""" &vbNewLine & _
"make new outgoing message with properties" & _
"{recipient:""" & recipient & """,subject:""" & subject & _
""",attachment:""" & theBook.FullName & """}" & vbNewLine _
& "move the result to out box folder" & vbNewLine & _
"send" & vbNewLine & _
"end tell"
MacScript mailStr
End Sub
You can call it like this:
ErageSendMail ThisWorkbook, "name@address", "This is the subject"
This can be easily modified for Outlook Express, and should be modifiable for other email applications.
You can send a single worksheet by copying the worksheet to a new workbook first, then sending it. Using Jim Gordon's technique:
Public Sub MailSingleSheet()
With Application
.ScreenUpdating = False
ActiveSheet.Copy
With .CommandBars.Add
.Visible = False
.Controls.Add(Type:=msoControlButton, Id:=2188).Execute
.Delete
End With
ActiveWorkbook.Close SaveChanges:=False
.ScreenUpdating = True
End With
End Sub
or using the ErageSendMail macro:
Public Sub MailSingleSheet()
Dim sPath As String
With Application
.ScreenUpdating = False
ActiveSheet.Copy
With ActiveWorkbook
.SaveAs Filename:=.Name
sPath = .FullName
ErageSendMail ActiveWorkbook, "name@address", "Attached: " & .Name
.Close SaveChanges:=False
End With
Kill sPath
.ScreenUpdating = True
End With
End Sub
This page last updated
© Copyright 2001 - 2004 McGimpsey and Associates. Except where noted, all code on this site may be distributed under the Gnu GPL. Acknowledgement is appreciated.
Don't know much about macros? Check out David McRitchie's "Getting Started" article.