Как сказал @KostaK - проверьте, существует ли файл, прежде чем добавить его.
Я использовал FileSystemObject
в этом примере, но Dir
также делает это.
Public Sub ComNamne_Click()
Dim objMail As Object
Dim objFSO As Object
Dim wrkSht As Worksheet
Dim vAttachments As Variant
Dim vFile As Variant
On Error GoTo Err_Handle
Set wrkSht = ThisWorkbook.Worksheets("Sheet1")
Set objFSO = CreateObject("Scripting.FileSystemObject")
vAttachments = Array("C:\Users\File1.xlsx", _
"C:\Users\File2.xlsx")
Set objMail = CreateObject("Outlook.Application").CreateItem(0)
With objMail
.Display
.To = wrkSht.Range("B3")
.CC = wrkSht.Range("C3")
.Body = wrkSht.Range("E3")
.Subject = wrkSht.Range("D3") & " " & wrkSht.Range("H1")
For Each vFile In vAttachments
If objFSO.FileExists(vFile) Then
.Attachments.Add vFile
End If
Next vFile
End With
FastExit:
Set objFSO = Nothing
Set wrkSht = Nothing
Set objMail = Nothing
Exit Sub
Err_Handle:
Select Case Err.Number
'case ??? Handle any errors you may expect.
Case Else
MsgBox "Unhandled error!", vbCritical + vbOKOnly
Resume FastExit
End Select
End Sub
Если адреса электронной почты являются внутренними для вашей организации, то ResolveDisplayNameToSMTP
от Сью Мошер может пригодиться: Создание кнопки «Проверить имена» в Excel