Картинки, наклеенные на тело письма Outlook, не отображаются - PullRequest
0 голосов
/ 01 мая 2020

Я использовал приведенный ниже код, чтобы скопировать диапазон из файла и вставить его в качестве изображения в электронные письма, но есть одна загвоздка: если вы не используете .display до .send, изображение не будет отображаться на приемнике , Кто-нибудь знает способ обойти это? Просто чтобы экран мигающего экрана не мигал.

Sub sendMail()

    Dim olApp As Object
    Dim NewMail As Object
    Dim ChartName As String
    Dim imgPath As String

    Set olApp = CreateObject("Outlook.Application")
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    tmpImageName = VBA.Environ$("temp") & "\tempo.jpg"

    Workbooks.Open "C:\FilePath\File.xlsm"
    Set RangeToSend = Workbooks("File.xlsm").Sheets(Name).Range(" ")

    RangeToSend.CopyPicture Appearance:=xlScreen, Format:=xlPicture

    Set sht = Sheets.Add
    sht.Shapes.AddChart
    sht.Shapes.Item(1).Select
    Set objChart = ActiveChart

    With objChart
        .ChartArea.Height = RangeToSend.Height
        .ChartArea.Width = RangeToSend.Width
        .ChartArea.Fill.Visible = msoFalse
        .ChartArea.Border.LineStyle = xlLineStyleNone
        .Paste
        .Export Filename:=tmpImageName, FilterName:="JPG"
    End With

    sht.Delete

    Workbooks("File.xlsm").Close

    Set NewMail = olApp.CreateItem(0)

    With NewMail
        .Subject = "Latest performance report" ' Replace this with your Subject
        .To = "email@email.com" ' Replace it with your actual email
        .HTMLBody = "<span LANG=EN>" _
            & "<p class=style2><span LANG=EN><font FACE=Calibri SIZE=3>" _
            & "Hello, this is the data range that you want:<br> " _
            & "<br>" _
            & "<img src=" & "'" & tmpImageName & "'/>" _
            & "<br>" _
            & "<img src=" & "'" & tmpImageName2 & "'/>" _
            & "<br>" _
            & "<br>Best Regards!</font></span>"
        .Display
        .Send

        Set olApp = Nothing
        Set NewMail = Nothing
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True

    End With


End Sub

1 Ответ

0 голосов
/ 01 мая 2020

Похоже, вы сохраняете изображение, снятое в Excel, на диск. И тогда вы обращаетесь к изображению во вновь созданном теле элемента. Но источник изображения по-прежнему указывает на файл на вашем диске. Таким образом, получатель никогда не отобразит его правильно.

Вместо этого вам необходимо прикрепить файл и затем добавить ссылку в тело сообщения.

Const PR_ATTACH_CONTENT_ID = "http://schemas.microsoft.com/mapi/proptag/0x3712001E"        
Const PR_ATTACHMENT_HIDDEN = "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B" 

...

Set colAttach = mail.Attachments        
Set l_Attach = colAttach.Add(path_to_the_file)            
Set oPA = l_Attach.PropertyAccessor            

oPA.SetProperty PR_ATTACH_CONTENT_ID, "itemID"            
oPA.SetProperty PR_ATTACHMENT_HIDDEN, True        

Затем вы можете изменить сообщение тело следующим образом:

.HTMLBody = "<span LANG=EN>" _
        & "<p class=style2><span LANG=EN><font FACE=Calibri SIZE=3>" _
        & "Hello, this is the data range that you want:<br> " _
        & "<br>" _
        & "<img src='cid:itemID'/>" _
        & "<br>" _
        & "<br>Best Regards!</font></span>"

    .Send
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...