Emailing documents in Office 2016 using VBA
Historically the default ‘Email’ button in Word/Excel had some limitations that made it mostly unusable. It’s tendency not to save messages to ‘Sent Items’ being it’s worst fault, but also the default Subject and Body content weren’t great. To get around these limitations I’d been using a custom ‘Email Document’ button attached to an ‘EmailDocument’ macro. After upgrading to Office 2016 this stopped working.
For some reason it was no longer possible to explicitly declare object types
Dim Outlook As Outlook.Application and
Dim MailItem As Outlook.MailItem would cause “Compile error: User-defined type not defined.” error messages.
Changing the declarations to
Dim Outlook As Object and
Dim MailItem As Object removed the error messages.
.Attachments.Add Source:=ActiveDocument.FullName, Type:=olByValue no longer added the document as an attachment.
It didn’t error, it just didn’t add the document.
On commenting out
On Error Resume Next an “Object doesn’t support named arguments.” error is raised.
Changing the call to just
.Attachments.Add ActiveDocument.FullName fixes the error.
NB: Prior to finding these errors I hadn’t tried this macro on a document stored in OneDrive. Because the
FullName for a OneDrive document is it’s web rather than local path, Office to attempts to redownload the document leading, eventually, to an “Out of memory.” error.
It’s not clear why these declarations and calls have become an issue in Office 2016, for me at least, but these were the changes required. As an aside the ‘Default’ email behaviour and default content in Office 2016 seem much improved (saved to ‘Sent Items’, Subject is just filename) and is probably the only option for OneDrive documents.