ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6873|回复: 4

[原创] excel vba 批量发送邮件邮件内容放入表格指定主题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-8-9 12:56 | 显示全部楼层 |阅读模式
本帖最后由 TomingTang 于 2016-8-9 12:56 编辑

最近工作中遇到同事经常要发送销售日报之类的,邮件内容极为相似,
发送内容有:邮件主题,报表,报表附件,发送抄送不同人员。
本分享实现内容,可以填入不同发送服务器,不同工作表、附件、发送给对应的接收人,邮件主题,邮件主要内容可以自定义,也可以默认进行发送。

附件说明:
工作表:“查询按钮”
B1:b3,填写发送邮件服务器,发送邮箱,发送邮箱密码

B9:c16填写邮件接收人、抄送人员邮箱,多个接收人用 分号  分隔,
E9:f16是指定邮件的主题、内容,不填写空白的,就按照默认的发送。。


按钮:“发送邮件”,点击,选择要发送那个工作表,这个是按照我同事需要设计的。可以对应进行修改。

程序比较乱,可以参考一下。。
附件删除了大部分内容、数据,其实还有部分是 从sql server提取数据,然后进行汇总。最后发送邮件的。后面 连接sql server 数据库进行数据汇总处理的,后面再进行分享。
谢谢。

outlook VBA自动发送邮件.zip (107.91 KB, 下载次数: 281)
附件代码:

复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-9 12:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件代码:

  1. Sub SendEmail_All(EmailPort, MailServer, shtname)
  2. 'MsgBox shtname
  3. 'Unload UserForm3
  4.     r1 = Worksheets("UK").[a65536].End(xlUp).Row   ' 开始全部客户占的最后行数
  5.     c = Range("iv1").End(xlToLeft).Column
  6.     Dim NameSpace$, Email As Object, ns$, n%
  7.     NameSpace = "http://schemas.microsoft.com/cdo/configuration/"
  8.     Set Email = CreateObject("CDO.Message")
  9.     '  UserForm1.Show 0    '激活进度条
  10.     ' '设置进度条控件
  11.     '   With UserForm1.ProgressBar1
  12.     '      .Min = 1    '设置进度条控件的最小值
  13.     '     .Max = r1  '设置进度条控件的最大值
  14.     '      .Scrolling = 0
  15.     '  End With
  16.     '  For i = 2 To r1  '按照准备发送的客户数
  17.     's2 = hbdyg(Range(Cells(i, 3), Cells(i, c)), "|")
  18.     ''发送准备工作
  19.     Email.From = Worksheets("查询按钮").Range("b2")                         'WorkSheets("查询按钮").Range("g2") & "@qq.com"    '发件人QQ邮箱=“辅助工作表”G2
  20.     Email.To = Mail_Arr(d_Mail(shtname), 2)   ' Worksheets("查询按钮").Range("b9")   '要发往的地址=“辅助工作表”D列
  21.     Email.cc = Mail_Arr(d_Mail(shtname), 3)    ' "jianming.tang@chukou1.com"   ' Mail_Arr(d_Mail(shtname), 3)
  22.     If shtname = "各仓汇总" Then
  23.         If Mail_Arr(d_Mail(shtname), 5) <> "" Then
  24.             Email.Subject = Mail_Arr(d_Mail(shtname), 5)
  25.         Else
  26.             Email.Subject = Format(Now() - 1, "m.d") & "海外仓内部结算日报表"
  27.         End If

  28.         If Mail_Arr(d_Mail(shtname), 6) <> "" Then
  29.             Email.Htmlbody = "<p>" & Worksheets("查询按钮").Range("F9") & "</p>" & getval(shtname)        ' Worksheets("查询按钮").Range("F5") & "<br/>" & getval(shtname)   'getVal(i)    'HTML形式正文(加入表格部分行)
  30.         Else
  31.             Email.Htmlbody = "<p>" & "Dear All: " & "</p><p> " & "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;附件是截止" & Format(Now() - 1, "yy年m月d日") & "海外仓内部结算收入日报表(含各仓数据、汇总数据),请查收,谢谢!" & "</p><p>" _
  32.                            & "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;备注:线下登记的FBA出库数据截止" & Format(Now() - 1, "d日") & ",专线数据截止" & Format(Now() - 1, "d日") & "。" & "</p>" & getval(shtname)
  33.         End If

  34.         Email.AddAttachment ThisWorkbook.Path & "\海外仓内部结算收入日报" & Format(Now() - 1, "yy年m月") & "内部结算收入-" & Format(Now() - 1, "m.d") & ".xlsx"    '添加附件
  35.     Else
  36.         If Mail_Arr(d_Mail(shtname), 5) <> "" Then
  37.             Email.Subject = Mail_Arr(d_Mail(shtname), 5)
  38.         Else
  39.             Email.Subject = Format(Now() - 1, "m.d") & shtname & " 仓海外仓内部结算日报表"    '标题=“辅助工作表”G4
  40.         End If

  41.         If Mail_Arr(d_Mail(shtname), 6) <> "" Then
  42.             Email.Htmlbody = "<p>" & Worksheets("查询按钮").Range("F9") & "</p>" & getval(shtname)       ' Worksheets("查询按钮").Range("F5") & "<br/>" & getval(shtname)   'getVal(i)    'HTML形式正文(加入表格部分行)
  43.         Else
  44.             Email.Htmlbody = "<p>" & "Dear All: " & "</p><p> " & "       附件是截止" & Format(Now() - 1, "yy年m月d日") & "海外仓内部结算收入日报表(币种:人民币),请查收,谢谢!" & "</p>" & getval(shtname)
  45.             '  Email.Htmlbody = "Dear All: " & vbCrLf & "       附件是截止" & Format(Now() - 1, "yy年m月d日") & "海外仓内部结算收入日报表(币种:人民币),请查收,谢谢!" & vbCrLf & getval(shtname)
  46.         End If
  47.         Email.AddAttachment ThisWorkbook.Path & "\海外仓内部结算收入日报" & shtname & "仓" & Format(Now() - 1, "m月") & "内部结算收入-" & Format(Now() - 1, "m.d") & ".xlsx"  '添加附件

  48.     End If
  49.     'Email.Textbody =WorkSheets("UK").Range("a" & i) & Chr(10) & s1 & Chr(10) & s2 '文本形式正文
  50.     If shtname = "UK" Then
  51.         Email.Subject = Format(Now() - 1, "m.d") & "UK warehouse internal settlement daily report "
  52.         Email.Htmlbody = "<p>" & "Hi Steve: " & "</p><p> " & "&nbsp;&nbsp;&nbsp;Attachment is on" & Format(Now() - 1, "mmmm dd") & ", income from settlement of  warehouse internal daily report ,  thank you!" & "</p>" & getval(shtname)
  53.     End If


  54.     With Email.Configuration.Fields
  55.         .Item(NameSpace & "smtpusessl") = 1
  56.         .Item(NameSpace & "sendusing") = 2
  57.         .Item(NameSpace & "smtpserver") = MailServer  '"smtp.qq.com"    '发送邮件服务器
  58.         .Item(NameSpace & "smtpserverport") = EmailPort         ' "465"
  59.         .Item(NameSpace & "smtpauthenticate") = 1
  60.         .Item(NameSpace & "sendusername") = Worksheets("查询按钮").Range("b2")             '   WorkSheets("查询按钮").Range("g2") & "@qq.com"    '发件人QQ邮箱
  61.         .Item(NameSpace & "sendpassword") = Worksheets("查询按钮").Range("b3")    '发件人QQ密码
  62.         .Update
  63.     End With
  64.     Email.send    ''发送

  65.     '   '进度条
  66.     '   UserForm1.ProgressBar1.Value = 1
  67.     ' UserForm5.Caption = Worksheets("UK").Range("c" & i) & "  的邮件(含附件)已发送。请稍候!"
  68.     DoEvents    '把控制权交给VBA
  69.     '   Next i
  70.     Unload UserForm1
  71.     'MsgBox "文件已经全部发送完成。"

  72.     '
  73. 100:
  74.     If Err.Number <> 0 Then    '处理错误
  75.         If Err.Number = -2147220977 Then
  76.             MsgBox "收信人地址 “" & Add & "” 错误! "
  77.         ElseIf Err.Number = -2147220980 Then
  78.             MsgBox "错误! 收信人地址未填写"
  79.         ElseIf Err.Number = -2147220973 Then
  80.             MsgBox "网络未连接! "
  81.         Else
  82.             MsgBox "其他错误!(超时、附件太大、邮箱已满) "
  83.         End If
  84.         End
  85.     End If
  86. End Sub



  87. Sub SendEmail(ByVal shtname As String)
  88.     Dim sht$, i%, EmailType$, EmailPort$, MailServer$, Arr
  89.     Set d_Mail = CreateObject("scripting.dictionary")

  90.     With Worksheets("查询按钮")
  91.         Mail_Arr = .Range("a9:f16")
  92.         For i = 1 To UBound(Mail_Arr)
  93.             d_Mail(Mail_Arr(i, 1)) = i
  94.         Next

  95.         EmailType = .Range("b1")
  96.         Select Case EmailType
  97.         Case "qq"
  98.             EmailPort = "465"
  99.             MailServer = "smtp.qq.com"
  100.         Case "企业邮箱"
  101.             EmailPort = "465"
  102.             MailServer = "smtp.exmail.qq.com"
  103.         Case "126"
  104.             EmailPort = "465"
  105.             MailServer = "smtp.126.com"
  106.         Case "163"
  107.             EmailPort = "465"
  108.             MailServer = "smtp.163.com"
  109.         Case "gmail"
  110.             EmailPort = "465"
  111.             MailServer = "smtp.gmail.com"
  112.         End Select
  113.         ' shtname = "UK"
  114.         Call SendEmail_All(EmailPort, MailServer, shtname)

  115.     End With


  116. End Sub


  117. Sub 发送邮件_最终()
  118. ' Dim myForm As 发送邮件

  119. '  Set myForm = New 发送邮件
  120. ' myForm.show
  121.     发送邮件.show
  122.     '  Set myForm = Nothing
  123. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-7-21 12:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
留下脚印,回头来参考

TA的精华主题

TA的得分主题

发表于 2019-9-25 18:27 | 显示全部楼层
有问题求助,方便联系一下吗?联系方式QQ6671529,微信1043078042,谢谢

TA的精华主题

TA的得分主题

发表于 2019-10-25 11:38 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 10:20 , Processed in 0.031568 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表