macro to email Access reports not as an attachment
I don't know VBA. Is there a way for me have the macro to send the email where the report would be in开发者_如何学C the body of the email and not as an attachment? I currently use the "send-object" command and send it in html format.
This is how I did it with SendObject, it attaches the report as a RTF and puts it in the body of the email.
Private Sub btnEmail_Click()
Dim IDnumber As Integer
Dim Message As String
Dim EmailTo As String
Dim FileName As String
'Get the current record's ID Number
IDnumber = Me![ID]
'set file name and path
FileName = Environ("USERPROFILE") & "\My Documents\temp.html"
'set email address
EmailTo = "someone@domain.com"
'get form to open a new record
DoCmd.GoToRecord , , acNewRec
'generate report for the current record entered
DoCmd.OpenReport "ReportName", acPreview, , "[ID]=" & IDnumber, acHidden
'create HTML file for the report
DoCmd.OutputTo acOutputReport, "ReportName", acFormatHTML, FileName
'open file
Open FileName For Input As #1
'read the file into a string
Message = Input(LOF(1) - 1, 1)
'close the file
Close 1
'generate email
DoCmd.SendObject acSendReport, "ReportName", acFormatRTF, EmailTo, , , "Subject", Message
'close the report
DoCmd.Close acReport, "ReportName"
'suppress errors if file is not there
On Error Resume Next
'remove file
Kill FileName
End Sub
If you are using Outlook, you can write a report or query to disk and use either HTMLBody or RTFBody, it is a while since I tested this, I hope it is still useful.
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim fs, f
Dim RTFBody
Dim MyApp As New Outlook.Application
Dim MyItem As Outlook.MailItem
DoCmd.OutputTo acOutputReport, "Report1", acFormatRTF, "Report1.rtf"
''DoCmd.OutputTo acOutputQuery, "Query1", acFormatHTML, "Query1.htm"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("Report1.rtf", ForReading)
''Set f = fs.OpenTextFile("Query1.htm", ForReading)
RTFBody = f.ReadAll
''Debug.Print RTFBody
f.Close
Set MyItem = MyApp.CreateItem(olMailItem)
With MyItem
.To = "abc@def.ghi"
.Subject = "Subject"
.RTFBody = RTFBody
''.HTMLBody = RTFBody
End With
MyItem.Display
精彩评论