ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] VBA通过OUTLOOK批量发邮件(自己研究了下)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-3-27 12:34 | 显示全部楼层 |阅读模式
整个代码如下:
  1. Function GetBoiler(ByVal sFile As String) As String
  2.     Dim fso As Object
  3.     Dim ts As Object
  4.     Set fso = CreateObject("Scripting.FileSystemObject")
  5.     Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
  6.     GetBoiler = ts.readall
  7.     ts.Close
  8. End Function
  9. Sub sendmail()

  10. '先通过VBA窗口"工具"菜单--"引用"选择 "Microsoft outlook 11.0 object Library
  11. '已在Outlook中设置可发送邮件的正常帐号

  12. On Error Resume Next
  13. Dim rowCount, endRowNo

  14. Dim objOutlook As New Outlook.Application
  15. Dim objMail As MailItem

  16. Dim strbody As String
  17. Dim SigString As String
  18. Dim Signature As String

  19. '统计Excel中的行数

  20. endRowNo = Cells(1, 1).CurrentRegion.Rows.Count

  21. '"创建objO为Outlook应用程序对象

  22. Set objO = New Outlook.Application

  23. '"循环发送电子邮件,第1行是表格头,所以从第2行开始
  24. '"创建objMail为一个邮件对象
  25. '"设置收件人地址(以下邮件的信息皆从EXCEL工件表的字段中获得)
  26. '"设置邮件主题

  27. For rowCount = 2 To endRowNo

  28.    Set objMail = objOutlook.CreateItem(olMailItem)
  29.    
  30.     strbody = "<H3><B>DEAR ALL,</B></H3>" & _
  31.               "此附件为" & _
  32.               "<B>" & _
  33.               Cells(rowCount, 4) & _
  34.               "</B>" & _
  35.               ",文件已寄出,请注意查收。<br>" & _
  36.               "邮件是批量发送的,如没有附件,则没有文件寄送,请知悉。<br>" & _
  37.               "如有其它问题,请及时反馈。<br>" & _
  38.               "<br>谢谢!"
  39.               
  40.     SigString = Environ("appdata") & _
  41.      "\Microsoft\Signatures\(请填写你签名的名字).htm"
  42.      
  43.     If Dir(SigString) <> "" Then
  44.         Signature = GetBoiler(SigString)
  45.     Else
  46.         Signature = ""
  47.     End If

  48.    With objMail
  49.      .To = Cells(rowCount, 1)
  50.      .CC = Cells(rowCount, 2)
  51.      .Subject = Cells(rowCount, 3)
  52.      '.Body = Cells(rowCount, 4)
  53.      .HTMLBody = strbody & "<br><br>" & Signature

  54.    '"设置附件(从通讯录表的“附件”字段中获得)
  55.     For i = 5 To 8
  56.      If Sheets("Sheet1").Cells(rowCount, i).Value <> "" Then
  57.         fj = "'" + Cells(rowCount, i) + "'" / 为字符串字段加上引号
  58.         MsgBox fj / 是了看一下附件字段的字符串内容对不对
  59.         .Display
  60.         .Attachments.Add Sheets("Sheet1").Cells(rowCount, i).Value
  61.      End If
  62.     Next i
  63. '发送附件一直不成功,只有当.Attachments.Add "d:\aa.doc"可以成功,一旦使用了EXCEL表格中的字段时,想让每个人接收
  64. '的附件不一样,这时用了下面二种方法都不成功,也试着在附件字段中加引号了,如 d:\aa.txt,改为"d:\aa.txt"
  65. '.Attachments.Add("'" + Cells(rowCount, 4) + "'")
  66. '.Attachments.Add(Cells(rowCount, 4))
  67. '发送邮件
  68.     If .Attachments.Count > 0 Then .Send
  69.    End With
  70.    Set objMail = Nothing
  71. Next
  72. Set objOutlook = Nothing
  73. End Sub
复制代码


  1. Function GetBoiler(ByVal sFile As String) As String
  2. Dim fso As Object
  3. Dim ts As Object
  4. Set fso = CreateObject("Scripting.FileSystemObject")
  5. Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
  6. GetBoiler = ts.readall
  7. ts.Close
  8. End Function
复制代码
这段代码是用来引用签名,大概是吧,菜鸟不太懂

  1.     strbody = "<H3><B>DEAR ALL,</B></H3>" & _
复制代码
Cells(rowCount, 4) 是表格第4列,可以插入在正文
  1.     SigString = Environ("appdata") & _
  2. "\Microsoft\Signatures\(请填写你签名的名字).htm"
复制代码
(请填写你签名的名字)】请填写你OUTLOOK的签名的名称

  1.     For i = 5 To 8
  2. If Sheets("Sheet1").Cells(rowCount, i).Value <> "" Then
  3. fj = "'" + Cells(rowCount, i) + "'" / 为字符串字段加上引号
  4. MsgBox fj / 是了看一下附件字段的字符串内容对不对
  5. .Display
  6. .Attachments.Add Sheets("Sheet1").Cells(rowCount, i).Value
  7. End If
  8. Next i
复制代码
此段代码,是添加附件的代码,可以根据实际情况修改,但是没做到,某个文件夹下所有文件作为附件发送,如果谁能修改,那就更好了

  1.     If .Attachments.Count > 0 Then .Send
复制代码
这是判断是否有附件,有就发送,但是至今没做到,没附件自动关闭邮件窗口,每次批量发完还要手动关闭没法邮件,这个也可以优化下
如果是纯文字的邮件,就把If .Attachments.Count > 0 Then删除即可,正文内容多的话,建议使用.Body = Cells(rowCount, 4),代码注释掉了,可以放弃签名

分享下我修改的
还有大家可以去http://club.excelhome.net/thread-904203-1-1.html,此贴3楼观摩下,要有图片的签名,需要修改些数据谢谢
邮件批量发送.rar (17.97 KB, 下载次数: 236)







TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-14 19:32 | 显示全部楼层
本帖最后由 funsz 于 2015-10-15 10:48 编辑

如有没附件的话,可以把
  1. If .Attachments.Count > 0 Then .Send
复制代码

上面这句代码稍微改下
  1. If .Attachments.Count > 0 Then
  2. .Send
  3. Else
  4. sendkeys "%{F4}N"
复制代码
sendkeys那段应该是那样吧,可以百度下,就是类型,没有附件的,ALT+F4以下,然后OUTLOOK弹出提示框,用N来选择否按钮。
那个邮件正文可以用HTML语言编辑,一般的有[font color="balck" face="微软雅黑" size="3"],这句是字体颜色黑色、字体微软雅黑、字体大小3(HTML字体一般大小1-7,自己可以设置下适合的大小),还有就是<br>=shift+enter,<p>=enter,<b></b>加粗,如果要对某几个字设置底纹,可以用<strong style="background:yellow">底纹为黄色,还有就是可以在正文添加图片,<img src="路径">,大概这些是新掌握的,还有的话,我觉得路径的可以使用相对路径会比绝对路径要好修改的附件如下
群发带附件邮件.rar (27.9 KB, 下载次数: 137)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-27 12:35 | 显示全部楼层
沙发自己坐,在论坛找了这么多好帖子,自己改的,发下,慢慢研究出来的

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-27 12:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-4-20 22:02 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-22 13:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
excelhomehuawei 发表于 2015-4-20 22:02
挺 有用,谢谢分享

我也是自己从这个网站整合的,加上点自己的研究,对于批量发邮件还是不错的,我自己现在也一直在用

TA的精华主题

TA的得分主题

发表于 2020-4-26 15:35 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 19:14 , Processed in 0.037274 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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