Отправка динамической таблицы excel по электронной почте outlook

Я пытаюсь в Excel 2016 отправить электронное письмо в Outlook 2016 с таблицей в теле письма. Я исследовал Stack Overflow, а также другие веб-сайты. Я считаю, что часть HTML сбивает с толку.

Ниже приведен код, который я написал для отправки электронного письма. Код работает, но мне нужно заменить .HTMLBody = "Hello World" на таблицу.

Sub Send_mail()

Dim outlookApp As Outlook.Application
Dim outlookMail As Outlook.MailItem

Set outlookApp = New Outlook.Application
Set outlookMail = outlookApp.CreateItem(olMailItem)

With outlookMail
    .To = "recipient@mail.com"
    .CC = ""
    .BCC = ""
    .Subject = "TEST123"
    .BodyFormat = olFormatHTML
    .HTMLBody = "Hello World"
    .Send
End With

Set outlookMail = Nothing
Set outlookApp = Nothing

End Sub

Таблица для вставки в тело письма состоит из столбцов A, B, C и D.
. Данные всегда начинаются со строки 2, но строка, содержащая последние данные, должна быть динамической. Таблица всегда будет довольно маленькой - максимум 20 строк.

Я полагаю, что следующее может помочь?
Поиск последней заполненной строки, затем цикл, чтобы пройти по каждой строке между 2 и последней заполненной строкой, преобразовать ее в формат HTML и сохранить в виде строки. Затем объедините эти строки в одну последнюю строку, чтобы поместить ее в тело письма.

Я просмотрел руководства Рона де Брюина, но я хотел бы добиться этого без необходимости создавать временный файл или использовать инструменты сторонних производителей. У макроса будет несколько пользователей из профессиональной компании, и он должен быть пуленепробиваемым. Я опасаюсь, что сохранение и удаление временных файлов может привести к ужасным ошибкам, если структура общих папок компании изменится.

@cyboashu Спасибо за ваш вклад! Однако я уже читал эту страницу. Как я уже упоминал в своем сообщении, мне бы очень хотелось добиться этого без необходимости создавать или удалять файлы. Это просто невозможно? :)

DirtyDeffy 11.04.2018 12:20

не невозможно, но слишком громоздко. Вам нужно будет перебрать строки вашего диапазона, а затем внутри каждой строки перебрать ячейки, а затем создать свой собственный HTML-код для таблицы.

cyboashu 11.04.2018 12:22
ThisWorkbook.Path возвращает имя папки, содержащей книгу, содержащую выполняемый макрос. Использование этой папки будет работать всегда, независимо от того, как часто они перемещают книгу или изменяют структуру файлов.
Tony Dallimore 11.04.2018 12:44
"Hello World" - это не HTML, хотя большинство браузеров отображают его правильно. <html><body>Hello World</body></html> - это минимальная строка HTML. Вам также нужно изучить Html и Css?
Tony Dallimore 11.04.2018 12:53

Взгляните на этот вопрос: Форматирование шрифтов VBA Excel для Outlook. ОП по этому вопросу был доволен решением Рона де Брюэна. Мой ответ представляет подход, более близкий к тому, что вы запрашиваете.

Tony Dallimore 11.04.2018 12:53

ЕСЛИ вы хотите отправить свою таблицу по электронной почте, почему бы вам не использовать объект ActiveSheet.MailEnvelope и такие свойства, как ActiveSheet.MailEnvelope.Introduction, ActiveSheet.MailEnvelope.Item.To, ActiveSheet.MailEnvelope.Item.Subject... и так далее? Это действительно намного проще.

Foxfire And Burns And Burns 11.04.2018 14:17

@TonyDallimore Спасибо за помощь. Использование ThisWorkbook.Path - это разумно. Для этой задачи мне не нужно изучать HTML, но в какой-то момент я должен выучить его. Я видел ваш ответ в теме, о которой вы говорили, и это действительно может сработать. Однако @FoxfireAndBurnsAndBurns вы совершенно правы. Следующий код удовлетворительно решил мою проблему: Sub Envelope() Range("table").Select ActiveWorkbook.EnvelopeVisible = True With ActiveSheet.MailEnvelope .Introduction = "" .Item.To = "" .Item.Subject = "" .Item.Send End With End Sub

DirtyDeffy 12.04.2018 08:48
1
8
2 250
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы скопировать из столбца A2: в последний использованный диапазон столбца D / или столбца 4, примером может быть

With ThisWorkbook.Worksheets("Sheet1")    
    Dim rng As Range
    Set rng = .Range("$A$2:" & .Cells( _
                       .Rows.Count, 4) _
                       .End(xlUp).Address)
    Debug.Print rng.Address ' Print on immediate Window
    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
End With

See Copy Excel range as Picture to Outlook

Интересный подход. Я не мог найти простой способ вставить изображение в тело письма без создания временного файла. Это невозможно?

DirtyDeffy 12.04.2018 08:29

@JoeBerg посмотрите эту ссылку stackoverflow.com/a/48897439/4539709

0m3r 12.04.2018 09:39

Это сработало отлично - спасибо! Напомним другим: это создает изображение желаемого диапазона в Excel, а затем вставляет его в тело электронного письма в Outlook.

DirtyDeffy 12.04.2018 14:54

Другие вопросы по теме