代码之家  ›  专栏  ›  技术社区  ›  DirtyDeffy

在Outlook电子邮件中发送动态Excel表

  •  1
  • DirtyDeffy  · 技术社区  · 6 年前

    我试图在Excel 2016中,在Outlook 2016中发送一封电子邮件,邮件正文中有一个表格。
    我研究过堆栈溢出以及其他网站。我发现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格式并将其存储为字符串。然后将这些字符串连接成最后一个字符串,放入电子邮件正文中。

    我已经看过了Ron de Bruin的指南,但我希望在不必创建临时文件或使用非Microsoft工具的情况下实现这一点。宏将有多个来自专业公司的用户,并且需要防弹。我担心,如果公司的共享文件夹结构发生变化,保存和删除临时文件可能会导致可怕的错误。

    1 回复  |  直到 4 年前
        1
  •  1
  •   0m3r    6 年前

    要从列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