There are 3 things you probably want to send from your Access application. You probably want to send an Access report or send an attachment(s).
1. Email An Access Report (SendObject)
2. Email An Access Report With Attachments (Outlook Automation)
3. Email With Attachment(s) (Outlook Automation)
First, if you are in the database, and want to send an item in the database (like a report), you can do this:
1. Email Access Report With VBA
Sub SendAccessReport()
'access report
AccessOutlookEmail "Access Report"
End Sub
Public Sub AccessOutlookEmail(ReportName As String)
Dim strSubject As String
Dim strAddresses As String
Dim strAddressCC As String
Dim strAddressBCC As String
Dim strBody As String
Dim blnDisplayMsg As Boolean
On Error GoTo errhandler
strSubject = "Test Subject"
strAddresses = "erik.j.loble@nasa.gov"
strAddressCC = "cc@test.gov"
strAddressBCC = "bcc@test.gov"
blnDisplayMsg = "True" 'Gives the ability to preview the message before sending.
'blnDisplayMsg = "False" 'Automatically sends the message without previewing it.
strBody = "This is the body of the email"
DoCmd.SendObject acSendReport, ReportName, acFormatPDF, strAddresses, strAddressCC, strAddressBCC, strSubject, strBody, blnDisplayMsg
Exit Sub
errhandler:
MsgBox "Email Not Sent", vbInformation, "Not Sent"
Exit Sub
End Sub
2. Email An Access Report With Attachments (Outlook Automation)
In my opinion, only the paths to the files should be stored in the database, even though Access now offers the cool little “Attachment” data type.
I don’t use it. Store the path to the file in the table cell and then enter the ParentID of which other record it belongs to.
If you want to send the Access report with some attachments, do the following:
1. When you click the “Email” button, export the report as a pdf to the folder that has all the files.
2. Use the next email function to put all the contents in the email “box” then you can send it.
That’s all.
3. Send An Attachment With VBA (with or without attachments using Outlook automation)
This way would work without “SendObject”. First you would have to output your report in PDF format, and then just add it in as an attachment.
Sub SendThis()
Dim intResult As Integer
'attachment
SendAttachmentEmail Array("C:\Interface Files\_LOCAL\pdffile.pdf", "C:\Interface Files\_LOCAL\aoc shot.png")
'Sends Outlook Email Without Attachments (not using SendObject)
'SendAttachmentEmail
End Sub
Function SendAttachmentEmail(Optional AttachmentPath As Variant)
'idea modified from https://www.devhut.net/2010/09/03/vba-outlook-automation/
'Send Email using late binding to avoid reference issues
Dim strTo As String
Dim strBCC As String
Dim strSubject As String
Dim strBody As String
Dim blnEdit As Boolean
Dim objOutlook As Object
Dim objOutlookMsg As Object
Dim objOutlookRecip As Object
Dim objOutlookAttach As Object
Dim i As Integer
Const olMailItem = 0
strTo = "erik.j.loble@nasa.gov"
strBCC = "bcc@domain.com"
strSubject = "test subject"
strBody = "test body"
blnEdit = True
On Error GoTo ErrorMsgs
Set objOutlook = CreateObject("Outlook.Application")
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.add(strTo)
objOutlookRecip.Type = 1
If Not IsMissing(strBCC) Then
Set objOutlookRecip = .Recipients.add(strBCC)
objOutlookRecip.Type = 3
End If
.Subject = strSubject
.Body = strBody
.Importance = 2 'Importance Level 0=Low,1=Normal,2=High
' Add attachments to the message if there are some.
'First check if there are attachments to add (passed into the function):
If Not IsMissing(AttachmentPath) Then
'are there multiple attachments?
If IsArray(AttachmentPath) Then
For i = LBound(AttachmentPath) To UBound(AttachmentPath) '- 1
If AttachmentPath(i) <> "" And AttachmentPath(i) <> "False" Then
Set objOutlookAttach = .Attachments.add(AttachmentPath(i))
End If
Next i
Else
'is there only 1 attachment?
If AttachmentPath <> "" Then
Set objOutlookAttach = .Attachments.add(AttachmentPath)
End If
End If
End If
For Each objOutlookRecip In .Recipients
If Not objOutlookRecip.Resolve Then
objOutlookMsg.Display
End If
Next
If blnEdit Then
'edit mode first then send
.Display
Else
'transparent/silent send and
.Send
End If
End With
Set objOutlookMsg = Nothing
Set objOutlook = Nothing
Set objOutlookRecip = Nothing
Set objOutlookAttach = Nothing
ErrorMsgs:
If Err.Number = "287" Then
MsgBox "You clicked No to the Outlook security warning. " & _
"Rerun the procedure and click Yes to access e-mail " & _
"addresses to send your message. For more information, " & _
"see the document at http://www.microsoft.com/office" & _
"/previous/outlook/downloads/security.asp."
Exit Function
ElseIf Err.Number <> 0 Then
MsgBox Err.Number & " - " & Err.Description
Exit Function
End If
End Function
If you have other ideas, please share them in the comments below.
Find Error Line Number in VBA With Erl
In this post you are going to find out a way of handling errors in your code with the Erl function. Erl displays the last label before the error Another alternative error handling solution is using labels at each point in long procedure. Here we get a random error: Here is the code behind the […]
Shared Access Database Management
Here is a handy setup for those who need to manage a shared access database. Either you can create this from scratch as per the example or add the new tables to your existing database. This setup will track: 1. the users currently using the database 2. what time the user and computer name currently […]
Access Database Users And Permissions Example
This post is a compilation of two of my previous posts: https://vbahowto.com/ms-access-object-security/ https://vbahowto.com/ms-access-login-form-revised/ This elaborates on the two posts a bit: First, here are all of the database objects: There are 2 tables here: tblLogin and tblAdmin Here are the main forms: frmLogin – this is the form that opens when the database opens Here […]
MS Access Object Security
Today’s post is based on a question that I received. We are going to assume that there are multiple users who have rights to view different database objects. So in this example there are 3 user logins with different rights to access 3 forms and 3 reports. Here is an overview of the database setup: […]
Support these sponsors: