This worked for me. Run from activesheet with range A1 to ...
Place code in a Module. Add Word object in Visual Basic Editor (VBE) menus Tools > References. Play Main().
Sub Main()
Dim r As Range, i As Long, c As Range
Dim fp As String, fn(1 To 1) As Variant
'File Path to save pdf's to.
fp = ThisWorkbook.Path & "\"
If Len(Dir(fp, vbDirectory)) = 0 Then
MsgBox fp & " does not exist.", vbCritical, "Macro Ending"
Exit Sub
End If
'Set range on current sheet and if odd columns, end.
Set r = Range("A1", Range("A1").End(xlToRight))
If (r.Cells.Count Mod 2) <> 0 Then
MsgBox "The top row's column count must be an even number.", _
vbCritical, "Macro Ending"
Exit Sub
End If
'Interate r and make pdf, and send emails with pdf
For i = 1 To r.Cells.Count Step 2
Set c = Range(r(i).Value)
If c Is Nothing Then GoTo NextI
fn(1) = fp & r(i).Value & ".pdf"
c.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fn, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
OMail r(i + 1).Value, r(i).Value & " Report", _
"Your report is attached.", fn
NextI:
Next i
End Sub
'More Excel to Outlook Examples: http://www.rondebruin.nl/win/s1/outlook/bmail4.htm
'Add reference: Microsoft Outlook xx.x Library, where xx.x is 14.0, 15.0, 16.0, etc.
Sub OMail(sTo As String, sSubject As String, sBody As String, _
Optional vAttachments, Optional bSend As Boolean = True)
Dim olApp As Outlook.Application, olMail As Outlook.MailItem, i As Integer
Set olApp = New Outlook.Application
Set olMail = olApp.CreateItem(olMailItem)
With olMail
.To = sTo
.Subject = sSubject
.Body = sBody
If Not IsEmpty(vAttachments) Then
For i = LBound(vAttachments) To UBound(vAttachments)
If Len(Dir(vAttachments(i))) <> 0 Then .Attachments.Add vAttachments(i)
Next i
End If
If bSend Then
.Send
Else
.Display
End If
End With
Set olMail = Nothing
Set olApp = Nothing
End Sub