前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA: 将单元格区域作为邮件正文发送到指定邮箱

VBA: 将单元格区域作为邮件正文发送到指定邮箱

作者头像
Exploring
发布2024-04-15 15:33:53
960
发布2024-04-15 15:33:53
举报

文章背景: 在工作中,有时需要将单元格区域的内容作为邮件正文发送到指定邮箱,如果希望邮件正文中的单元格区域带表格样式,则需要将其转换为html格式。

系统:Win10

发件邮箱:Outlook 365

VBA代码如下:

代码语言:javascript
复制
Option Explicit

Sub 发送邮件()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("test") '将"test"替换为你要操作的工作表名称

    '设置邮件参数
    Dim outlookApp As Object
    Set outlookApp = CreateObject("Outlook.Application")
    
    Dim mailItem As Object
    Set mailItem = outlookApp.CreateItem(0)
    
    With mailItem
    
        .To = "xxx" '将"xxx"替换为实际的收件人邮箱地址
        
        .Subject = "测试数据的最新日期" '将"邮件主题"替换为实际的邮件主题
        
        .HTMLBody = "详情如下:" & RangetoHTML(ws.Range("A1:G4")) '使用HTML格式的正文
        
        .Send '发送邮件
        
    End With

    '释放对象
    Set mailItem = Nothing
    Set outlookApp = Nothing
    
End Sub


Function RangetoHTML(rng As Range) As String

    '将单元格区域转化为HTML格式

    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook
    
    ' 创建临时文件和工作簿
    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
    
    Set TempWB = Workbooks.Add(1)
    
    ' 复制范围到临时工作簿
    rng.Copy
    
    With TempWB.Sheets(1)
    
        '粘贴值和格式
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        
        '清除剪切板
        Application.CutCopyMode = False
        
        '删除可能存在的绘图对象
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
        
    End With
    
    ' 保存临时工作簿为HTML文件
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         fileName:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With
    
    ' 读取HTML文件内容
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    
    ' 删除临时文件和工作簿
    fso.DeleteFile TempFile
    
    TempWB.Close savechanges:=False
    
    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
    
End Function

运行效果:

相关资料:

[1] 讯飞星火大语言模型

[2] VBA: 通过Application.OnTime定时执行程序(2)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档