Я использую код от Рона де Брюина , чтобы подготовить почтовый отчет в Outlook из файла Excel.
Я немного изменил код, чтобы включить таблицу из Excel файл, текст вокруг и, возможно, вложение. У меня проблема с этим вложением.
Чтобы обработать возможность вложения, я добавил к строке Рона де Брюина эту строку, где mAtt - строка, содержащая местоположение файла для присоединения:
If mAtt <> vbNullString Then .Attachments.Add mAtt,0
Хотя он правильно обрабатывает любой вызов подпрограммы с аргументом mAtt, равным «» (в этом случае я хочу подготовить почту БЕЗ вложения), я не получаю никакого результата, если предоставлена строка, но файл не может быть найдено (недоступные файловые серверы или несуществующий файл). Почтовый объект просто не отображается.
С обработкой ошибок ничего не происходит (хотя я вижу, к моменту выполнения или пошагового выполнения, что код правильно выполняет часть процедуры RangeTo Html). Без обработки ошибок он просто останавливается на приведенной выше строке, как и следовало ожидать.
Я хотел бы, чтобы мой код включал go в случае проблемы с вложением, и по-прежнему отображать почту Outlook, готовую к отправке. отправлено, несмотря на отсутствие вложений.
Есть ли лучший способ управления вложениями. Добавление функции VBA?
Вот мой полный код.
Sub PrepareOutlookMail(mTo As String, mCC As String, mSub As String, mAtt As String, mTab As Range, Optional mailBegin As String, Optional mailEnd As String)
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
'Don't forget to copy the function RangetoHTML in the module.
'Working in Excel 2000-2016
Dim OutApp As Object
Dim OutMail As Object
If mTab Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = mTO
.CC = mCC
.Subject = mSub
If mAtt <> vbNullString Then .Attachments.Add mAtt,0
.HTMLBody = mailBegin & RangetoHTML(mTab) & mailEnd
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
ДОБАВИТЬ Я также пытался добавить условие для проверки существования файла, как советовали некоторые другие ответы о VBA.
If mAtt <> vbNullString And Len(Dir(mAtt,vbDirectory)) <> 0 Then .Attachments.Add mAtt,0
Тем не менее, это не меняет поведение: ничего не отображается. Когда я активирую ошибки, я сталкиваюсь с ошибкой времени выполнения '52': неверное имя файла или номер .