Excel VBA开发自动发送邮件

转自:http://blog.csdn.net/chenxianping/article/details/70821116

一、.设置Outlook邮箱帐(略不是本文章的重点)

二、.设置Outlook信任中心如下步骤

        若没有做如下操作设置,则Excel VBA调用Outlook自动发送邮件时提示如下

2.1 Outlook->工具->信任中心

2.2 编程访问->选中”从不向我发出可疑活动警告(不推荐)“,注意:建议使用Excel VBA自动发送邮件启用该功能


三、启用Excel 宏

3.1 启用宏操作如下:

打开Excel点击Office按钮->Excel选项,如下图

选择”Excel 选项“窗体中左边的”信任中心“->信任中心设置,如下图:

在”信任中心“窗体中->宏设置,选如下图二个选项

然后关闭Excel重新打开就可以启用宏和VBA编程开发了。

四、Excel VBA开发

4.1 创建模类:clsModel,写如下代码:

[vb]  view plain  copy
  1. Public Declare Function SetTimer Lib "user32" _  
  2.         (ByVal hwnd As LongByVal nIDEvent As LongByVal uElapse As LongByVal lpTimerfunc As LongAs Long  
  3. Public Declare Function KillTimer Lib "user32" _  
  4.         (ByVal hwnd As LongByVal nIDEvent As LongAs Long  
  5. Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)  
  6. Sub AutoMail()  
  7.     GB_EMPSALARY.Show  
  8. End Sub  
  9.   
  10. 'Function WinProcA(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal SysTime As Long) As Long  
  11. '    KillTimer 0, idEvent  
  12. '    DoEvents  
  13. '    Sleep 100  
  14. '    '使用Alt+S发送邮件,这是本文的关键之处,免安全提示自动发送邮件全靠它了  
  15. '    Application.SendKeys "%s"  
  16. 'End Function  
  17.   
  18. ' 发送单个邮件的子程序  
  19. Sub SendMail(ByVal to_who As StringByVal SubJect As StringByVal body As StringByVal cell As String)  
  20.     Dim objOL As Object  
  21.     Dim itmNewMail As Object  
  22.     '引用Microsoft Outlook 对象  
  23.     Set objOL = CreateObject("Outlook.Application")  
  24.     Set itmNewMail = objOL.CreateItem(olMailItem)  
  25.     On Error GoTo Err_Handle  
  26.       
  27.     With itmNewMail  
  28.         .SubJect = SubJect  '主旨  
  29.         .htmlBody = body    '正文本文  
  30.         '.body = body   '正文本文  
  31.         .To = to_who  '收件者  
  32.         '.Attachments.Add attachement '附件,如果你不需要发送附件,可以把这一句删掉即可,Excel中的第四列留空,不能删哦  
  33.         .Display  '启动Outlook发送窗口  
  34.         'SetTimer 0, 0, 0, AddressOf WinProcA  
  35.         .Send  
  36.         'Application.Wait (Now + TimeValue("0:00:03"))  
  37.         'Application.SendKeys "%s"  
  38.     End With  
  39.     Worksheets("Sheet1").Range(cell).Value = "Y"  
  40.     Set objOL = Nothing  
  41.     Set itmNewMail = Nothing  
  42. Err_Handle:  
  43.     Set objOL = Nothing  
  44.     Set itmNewMail = Nothing  
  45.     On Error Resume Next  
  46. End Sub  

4.2 创建自动发送邮件界面,方便用户可以看到操作Excel表格哪一行。

要代码如下:

[vb]  view plain  copy
  1. Private Sub butSend_Click()  
  2.     On Error Resume Next  
  3.     Dim i As Integer  
  4.       
  5.     Dim EmpName, eMail, mailSubJect, mailBody, cell, sendFlag As String  
  6.       
  7.       
  8.     i = CInt(txtStartRow.Text)  
  9.     If (i < 3) Then  
  10.         i = 3  
  11.     End If  
  12.     '邮箱主题  
  13.         mailSubJect = "某某公司" & Worksheets("Sheet1").Range("C1").Value & "工资条"  
  14.     '员工姓名  
  15.     EmpName = Worksheets("Sheet1").Range("E" & i).Value  
  16.     '员工姓名为空退出停止发送邮件  
  17.     Do While EmpName <> ""  
  18.         '是否发送邮件标志位  
  19.         sendFlag = Worksheets("Sheet1").Range("A" & i).Value  
  20.         '邮箱地址  
  21.         eMail = Worksheets("Sheet1").Range("AH" & i).Value  
  22.         '邮件是否发关,邮箱地址是否为空  
  23.         If (sendFlag <> "Y" And eMail <> ""Then  
  24.            '邮箱内容  
  25.            mailBody = SalaryContext(EmpName, i)  
  26.            '是否发送标志单元格  
  27.            cell = "A" & i  
  28.            SendMail eMail, mailSubJect, mailBody, cell  
  29.         End If  
  30.         i = i + 1  
  31.         '获得下一行的员工姓名  
  32.         EmpName = Worksheets("Sheet1").Range("E" & i).Value  
  33.         DoEvents  
  34.         Sleep 300  
  35.         txtSend.Text = i  
  36.     Loop  
  37. End Sub  
  38. '工资条表格明细  
  39. Function SalaryContext(ByVal EmpName As StringByVal Row As IntegerAs String  
  40.     Dim htmlBody, tableHeader, tableBody As String  
  41.     htmlBody = "<html>" & _  
  42.         "<head>" & _  
  43.         "<meta http-equiv=""Content-Type"" contentType=""application/vnd.ms-excel;charset=gb2312"">" & _  
  44.         "   <STYLE type=text/css>" & _  
  45.         "   .sub_title{" & _  
  46.         "      FONT-WEIGHT: bold;" & _  
  47.         "      FONT-SIZE: 4mm;" & _  
  48.         "      VERTICAL-ALIGN: middle;" & _  
  49.         "      TEXT-ALIGN: center" & _  
  50.         "      background-color: #ffff66//" & _  
  51.         "      }"  
  52.           
  53.     htmlBody = htmlBody & "   .context {" & _  
  54.         "      font-size: 12px;" & _  
  55.         "      BORDER-TOP-WIDTH: 0.6mm;" & _  
  56.         "      PADDING-RIGHT: 1mm;" & _  
  57.         "      PADDING-LEFT: 1mm;" & _  
  58.         "      BORDER-LEFT-WIDTH: 0.6mm;" & _  
  59.         "      BORDER-BOTTOM-WIDTH: 0.6mm;" & _  
  60.         "      PADDING-BOTTOM: 0mm;" & _  
  61.         "      PADDING-TOP: 0mm;" & _  
  62.         "      BORDER-COLLAPSE: collapse;" & _  
  63.         "      BORDER-RIGHT-WIDTH: 0.6mm" & _  
  64.         "      }"  
  65.   
  66.     htmlBody = htmlBody & "   .context td{" & _  
  67.         "      border:1px solid #009900;" & _  
  68.         "      }" & _  
  69.         "   .page {" & _  
  70.         "      page-break-after: always;" & _  
  71.         "      }" & _  
  72.         "  </STYLE>" & _  
  73.         "</head><body>Dear " & EmpName & Chr(13)  
  74.       
  75.     htmlBody = htmlBody & "<table class=""context"" borderColor=""#669933"" border=1>"  
  76.     'MsgBox htmlBody  
  77.     '表头  
  78.     tableHeader = "<tr bgcolor=""#FFE66F""><td align=""center"">固定工<br>资基准</td>" & _  
  79.         "<td align=""center"">浮动绩<br>效基准</td><td align=""center"">应勤<br>时数</td>" & _  
  80.         "<td align=""right"">实际<br>出勤</td><td align=""center"">节<br>假日</td><td align=""center"">考核<br>系数</td>" & _  
  81.         "<td align=""center"">固定<br>工资</td><td align=""center"">浮动<br>绩效</td><td align=""center"">外宿<br>补贴</td>" & _  
  82.         "<td align=""right"">伙食&补贴</td><td align=""center"">奖金</td><td align=""center"">提成</td>" & _  
  83.         "<td align=""right"">补贴</td><td align=""center"">补发</td><td align=""center"">其他<br>补贴</td>" & _  
  84.         "<td align=""right"">应发<br>合计</td><td align=""center"">迟到</td><td align=""center"">伙食</td>" & _  
  85.         "<td align=""right"">社保</td><td align=""center"">公<br>积金</td><td align=""center"">房租</td>" & _  
  86.         "<td align=""right"">水电</td><td align=""center"">个税</td><td align=""center"">话费</td>" & _  
  87.         "<td align=""right"">代扣学费</td><td align=""center"">其他</td><td align=""center"">代扣<br>合计</td>" & _  
  88.         "<td align=""right"">实发工资</td></tr>"  
  89.    'MsgBox Worksheets("Sheet1").Range("F" & i).Value  
  90.    '表格内容  
  91.    tableBody = "<tr>" & _  
  92.         "<td>" & Worksheets("Sheet1").Range("F" & Row).Value & "</td>" & _  
  93.         "<td>" & Worksheets("Sheet1").Range("G" & Row).Value & "</td>" & _  
  94.         "<td>" & Worksheets("Sheet1").Range("H" & Row).Value & "</td>" & _  
  95.         "<td>" & Worksheets("Sheet1").Range("I" & Row).Value & "</td>" & _  
  96.         "<td>" & Worksheets("Sheet1").Range("J" & Row).Value & "</td>" & _  
  97.         "<td>" & Worksheets("Sheet1").Range("K" & Row).Value & "</td>" & _  
  98.         "<td>" & Worksheets("Sheet1").Range("L" & Row).Value & "</td>" & _  
  99.         "<td>" & Worksheets("Sheet1").Range("M" & Row).Value & "</td>" & _  
  100.         "<td>" & Worksheets("Sheet1").Range("N" & Row).Value & "</td>" & _  
  101.         "<td>" & Worksheets("Sheet1").Range("O" & Row).Value & "</td>" & _  
  102.         "<td>" & Worksheets("Sheet1").Range("P" & Row).Value & "</td>" & _  
  103.         "<td>" & Worksheets("Sheet1").Range("Q" & Row).Value & "</td>" & _  
  104.         "<td>" & Worksheets("Sheet1").Range("R" & Row).Value & "</td>" & _  
  105.         "<td>" & Worksheets("Sheet1").Range("S" & Row).Value & "</td>" & _  
  106.         "<td>" & Worksheets("Sheet1").Range("T" & Row).Value & "</td>" & _  
  107.         "<td>" & Worksheets("Sheet1").Range("U" & Row).Value & "</td>" & _  
  108.         "<td>" & Worksheets("Sheet1").Range("V" & Row).Value & "</td>" & _  
  109.         "<td>" & Worksheets("Sheet1").Range("W" & Row).Value & "</td>" & _  
  110.         "<td>" & Worksheets("Sheet1").Range("X" & Row).Value & "</td>" & _  
  111.         "<td>" & Worksheets("Sheet1").Range("Y" & Row).Value & "</td>" & _  
  112.         "<td>" & Worksheets("Sheet1").Range("Z" & Row).Value & "</td>" & _  
  113.         "<td>" & Worksheets("Sheet1").Range("AA" & Row).Value & "</td>" & _  
  114.         "<td>" & Worksheets("Sheet1").Range("AB" & Row).Value & "</td>" & _  
  115.         "<td>" & Worksheets("Sheet1").Range("AC" & Row).Value & "</td>"  
  116.   
  117.    tableBody = tableBody & "<td>" & Worksheets("Sheet1").Range("AD" & Row).Value & "</td>" & _  
  118.         "<td>" & Worksheets("Sheet1").Range("AE" & Row).Value & "</td>" & _  
  119.         "<td>" & Worksheets("Sheet1").Range("AF" & Row).Value & "</td>" & _  
  120.         "<td>" & Worksheets("Sheet1").Range("AG" & Row).Value & "</td>" & _  
  121.         "</tr>"  
  122.   
  123.    'MsgBox tableBody  
  124.       
  125.    htmlBody = htmlBody & tableHeader & tableBody & "</table></body></html>"  
  126.      
  127.    SalaryContext = htmlBody  
  128. End Function  

Excel表格中的内容如下


  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值