#excel #vba #email-attachments
Вопрос:
Я создаю базу данных инвентаризации как относительный новичок с VBA. Я пытался перенастроить «Рона.Сценарии DeBruin VBA» для моей кнопки VBA для копирования, вставки и форматирования диапазона excel в новое почтовое вложение и отправки в ячейку диапазона, построенную с использованием массивов для объединения адресов.
Проблема, с которой я столкнулся, заключается в следующем…. Я создал VBA, который отправит вложение по электронной почте, если в сценарии указано электронное письмо, и я могу отправить электронное письмо с адресами диапазона в массиве, но не с вложениями, но каждый раз, когда я пытаюсь собрать их вместе, я получаю пробелы в электронном письме и никаких вложений.
Вопрос решен — код был отредактирован
Sub Mail_Range2() 'Working in Excel 2000-2016 'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm Dim Source As Range Dim Dest As Workbook Dim wb As Workbook Dim TempFilePath As String Dim TempFileName As String Dim FileExtStr As String Dim FileFormatNum As Long Dim OutApp As Object Dim OutMail As Object Set Source = Nothing On Error Resume Next Set Source = Range("b4:r39").SpecialCells(xlCellTypeVisible) On Error GoTo 0 If Source Is Nothing Then MsgBox "The source is not a range or the sheet is protected, please correct and try again.", vbOKOnly Exit Sub End If With Application .ScreenUpdating = False .EnableEvents = False End With Set wb = ActiveWorkbook Set Dest = Workbooks.Add(xlWBATWorksheet) Source.Copy With Dest.Sheets(1) .Cells(1).PasteSpecial Paste:=8 .Cells(1).PasteSpecial Paste:=xlPasteValues .Cells(1).PasteSpecial Paste:=xlPasteFormats .Cells(1).Select Application.CutCopyMode = False End With TempFilePath = Environ$("temp") amp; "" TempFileName = Format(Now, "yy-mm-dd h-mm") amp; " " amp; "Inventory Adjustment " If Val(Application.Version) lt; 12 Then 'You use Excel 97-2003 FileExtStr = ".xls": FileFormatNum = -4143 Else 'You use Excel 2007-2016 FileExtStr = ".xlsx": FileFormatNum = 51 End If Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With Dest .SaveAs TempFilePath amp; TempFileName amp; FileExtStr, FileFormat:=FileFormatNum 'Email ranges all located in activeworksheet in same workbook as button With OutMail .To = ThisWorkbook.Sheets("Email").Range("B3").value .CC = ThisWorkbook.Sheets("Email").Range("B4").value .BCC = ThisWorkbook.Sheets("Email").Range("B5").value .Subject = ThisWorkbook.Sheets("Email").Range("B6").value .Body = ThisWorkbook.Sheets("Email").Range("B7").value .Attachments.Add Dest.FullName '.Send .Display On Error GoTo 0 End With .Close savechanges:=False End With Kill TempFilePath amp; TempFileName amp; FileExtStr Set OutMail = Nothing Set OutApp = Nothing With Application .ScreenUpdating = True .EnableEvents = True End With MsgBox "Thank you! Email sent.", vbExclamation End Sub
Комментарии:
1. Возможно, удалить
On Error Resume Next
, чтобы выявить ошибку? Вы должны полностью определить свой диапазон,Sheets("Email").Range("B#")
поскольку VBA предполагает, что вы имеете в видуActiveWorkbook
(что выглядит такDest
)2. Спасибо, ошибка является безусловной ссылкой и подчеркивает .закрыть
3. удалите
End With
это ниже.Display
. Похоже, у тебя есть лишнийEnd With
. (Правильный отступ покажет вам это)4. Спасибо Рэймонду, работающему над углублением. вынул Конец С нижним . Отображение по — прежнему не включает вложения или адреса электронной почты, но подсветка ошибок отсутствует.
5. предполагая, что ваша последняя правка — это то, что у вас есть в настоящее время-вы не удалили
On Error Resume Next
(я имею в виду приведенную вышеWith OutMail
, и вы также не полностью определили свой диапазон, как указано в моем первом комментарии.