【问题标题】:Add image from Excel sheet to Outlook HTML body using Excel VBA使用 Excel VBA 将图像从 Excel 工作表添加到 Outlook HTML 正文
【发布时间】:2019-04-30 20:16:14
【问题描述】:

我正在尝试将 Excel 工作表中的图像添加到 Outlook 电子邮件。

我尝试使用存储在网络位置和 Internet 上的图像的链接。但是,并非所有用户都可以访问这些位置。

是否可以将图像存储在另一个工作表中,然后将其复制到电子邮件正文中?

我知道以下方法行不通,因为您无法导出形状,但我可以这样做吗?

ActiveUser = Environ$("UserName")
TempFilePath = "C:\Users\" & ActiveUser & "\Desktop\"

Sheets("Images").Shapes("PanelComparison").Export TempFilePath & "\PanelComparison.png"
panelimage = "<img src = ""TempFilePath\PanelComparison.png"" width=1000 height=720 border=0>"

【问题讨论】:

    标签: html excel vba outlook


    【解决方案1】:

    CreateEmail Sub 调用 SaveToImage Sub。 SaveToImage 子抓取一个范围,在新页面上创建一个图表,然后将图片(objChart)保存到指定目录。

    LMpic 字符串变量调用刚刚保存的图像并将其输入到 HTML 正文中。

    Public Sub CreateEmail()
    
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim FN, LN, EmBody, EmBody1, EmBody2, EmBody3 As String
    Dim wb As Workbook
    Dim ws As Worksheet
    
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    
    Set wb = ActiveWorkbook
    Set ws = Worksheets("Sheet1")
    
    Call SaveToImage
    
    
    ws.Activate
    
    LMpic = wb.Path & "\ClarityEmailPic.jpg'"
    
    On Error GoTo cleanup
    For Each cell In Columns("D").Cells.SpecialCells(xlCellTypeConstants)
        If cell.Value Like "?*@?*.?*" Then
    
            FN = Cells(cell.Row, "B").Value
            LN = Cells(cell.Row, "A").Value
            EmBody = Range("Email_Body").Value
            EmBody1 = Range("Email_Body1").Value
            EmBody2 = Range("Email_Body2").Value
            'EmBody3 = Range("Email_Body3").Value
    
            Set OutMail = OutApp.CreateItem(0)
            On Error Resume Next
            With OutMail
                .To = cell.Value
                .Subject = "Volt Clarity Reminder "
                .Importance = olImportanceHigh
                .HTMLBody = "<html><br><br><br>" & _
                                "<table border width=300 align=center>" & _
                                    "<tr bgcolor=#FFFFFF>" & _
                                        "<td align=right>" & _
                                            "<img src='" & objRange & "'>" & _
                                        "</td>" & _
                                    "</tr>" & _
                                    "<tr border=0.5 height=7 bgcolor=#102561><td colspan=2></td></tr>" & _
                                    "<tr>" & _
                                        "<td colspan=2 bgcolor=#E6E6E6>" & _
                                        "<body style=font-family:Arial style=backgroung-color:#FFFFFF align=center>" & _
                                                "<p> Dear " & FN & " " & LN & "," & "</p>" & _
                                                "<p>" & EmBody & "</p>" & _
                                                "<p>" & EmBody2 & "<i><font color=red>" & EmBody1 & "</i></font>" & "</p>" & _
                                        "</body></td></tr></table></html>"
                .Display  'Or use Display
            End With
    
            On Error GoTo 0
            Set OutMail = Nothing
    
        End If
    Next cell
    
    cleanup:
        Set OutApp = Nothing
        Application.ScreenUpdating = True
    End Sub
    
    Public Sub SaveToImage()
    '
    ' SaveToImage Macro
    '
    
        Dim DataObj As Shape
        Dim objChart As Chart
        Dim folderpath As String
        Dim picname As String
        Dim ws As Worksheet
    
        Application.ScreenUpdating = False
    
        Set ws = Worksheets("Sheet2")
    
        folderpath = Application.ActiveWorkbook.Path & Application.PathSeparator 'locating & assigning current folder path
        picname = "ClarityEmailPic.jpg" 'image file name
    
        Application.ScreenUpdating = False
    
        Call ws.Range("Picture").CopyPicture(xlScreen, xlPicture) 'copying the range as an image
    
        Worksheets.Add(after:=Worksheets(1)).Name = "Sheet4" 'creating a new sheet to insert the chart
        ActiveSheet.Shapes.AddChart.Select
        Set objChart = ActiveChart
        ActiveSheet.Shapes.Item(1).Width = ws.Range("Picture").Width 'making chart size match image range size
        ActiveSheet.Shapes.Item(1).Height = ws.Range("Picture").Height
    
        objChart.Paste 'pasting the range to the chart
        objChart.Export (folderpath & picname) 'creating an image file with the activechart
    
        Application.DisplayAlerts = False
        ActiveWindow.SelectedSheets.Delete 'deleting sheet4
        Application.DisplayAlerts = True
    
    
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      通常,电子邮件图像存储在网络服务器上,SRC 指向该服务器 (http://...)。它们没有嵌入到电子邮件本身中。

      【讨论】:

      • 好的,谢谢,但它并没有真正回答我如何将 excel 中的图像放入电子邮件中。
      • 您可以将其作为附件进行。见:stackoverflow.com/questions/6224766/…
      • 我可以附加它们,但理想情况下我希望它们在电子邮件正文中
      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多