Так что вместо того, чтобы ждать ошибок или пытаться их подавить, лучше проверить, существует ли файл. Поэтому вы можете использовать такую функцию, которая возвращает true
, если файл существует:
Public Function FileExists(FilePath As String) As Boolean
Dim Path As String
On Error Resume Next
Path = Dir(FilePath)
On Error GoTo 0
If Path <> vbNullString Then FileExists = True
End Function
Для добавления вложений я рекомендую использовать массив для имен файлов, чтобы вы могли легко просматривать и прикреплять файлы, если они существуют. Каждый раз, когда мы добавляем вложение, мы также увеличиваем AttachedFilesCount
.
Таким образом, вы не используете On Error Resume Next
неправильно и не сталкиваетесь с проблемами отладки из-за этого. Итак, у вас есть чистый раствор.
With OutMail
.To = Cells(X, 4)
.CC = Cells(X, 6)
.Subject = Cells(X, 8)
.Body = Cells(1, 8)
Dim FileLocations As Variant
FileLocations = Array("C:\Users\HKhan\Desktop\Final Macro\" & Cells(X, 1) & "-OICR.xlsx", _
"C:\Users\HKhan\Desktop\Final Macro\" & Cells(X, 1) & "-OICLR.xlsx", _
"C:\Users\HKhan\Desktop\Final Macro\" & "OIC - Bank Details" & ".pdf", _
"C:\Users\HKhan\Desktop\Final Macro\" & "OICL - Bank Details" & ".pdf")
Dim AttachedFilesCount As Long
Dim FileLocation As Variant
For Each FileLocation In FileLocations
If FileExists(FileLocation) Then
.Attachments.Add (FileLocation)
AttachedFilesCount = AttachedFilesCount + 1
End If
Next FileLocation
If AttachedFilesCount > 0 Then
.Display 'display or send email
Else
.Close 'close it if no attachments
End If
End With
Если вам по-прежнему требуется дополнительная обработка ошибок при добавлении вложений (лично я не думаю, что вам это нужно обязательно), вы можете реализовать это следующим образом:
On Error Resume Next 'turn error reporting off
.Attachments.Add (FileLocation) 'the line where an error might possibly occur.
If Err.Number <> 0 Then 'throw a msgbox if there is an error
MsgBox "Could not attach file """ & FileLocation & """ to the email." & vbCrLf & Err.Description, vbExclamation, "Error " & Err.Number, Err.HelpFile, Err.HelpContext
End If
On Error Goto 0 'turn error reporting on again!