二、例子
每个公司每月发工资的同时要给每个员工一张工资单。而发工资单的主要目的是让员工知道自己一个月来工资组成的详细情况,确认财务结算是否有误。一般的处理方式是直接在原来全员工资表的基础上给每个员工记录前插入表头等整张打印出来后一条一条的剪裁出来发给各个员工。这种方式对小公司来说还可以,但当公司达到好几十上百或上千的员工时,财务人员光每个月剪裁着工资单就要花不少时间,而且还要花费很多纸张
我们的解决方式是将每个人的表头及工资记录提取出来重新生成一个xls文件,同时启动outlook将它作为附件发送给相应的个人。这样每个月公司的财务人员做好了全员工资报表后只要点击一下一个按钮就可完成。这样既节省了财务人员的时间降低了他们的工作强度使他们有更多精力去做专业的事,同时也为公司节约了纸张。----别看小小纸张,在好多公司打印纸的消耗量有多大大家心里应该都有数,这可是一笔不小的开销啊。
该文就以上面的思想为主线来实现。具体代码如下:
Private Sub CommandButton1_Click()
Dim outFile
Dim Email
Dim cn As New ADODB.Connection
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim oOutlookApp As New Outlook.Application
Dim oItemMail As Outlook.MailItem
Set oItemMail = oOutlookApp.CreateItem(olMailItem)
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:/Documents and Settings/gw/My Documents/Book3.xls;" & _
"Extended Properties=""Excel 8.0;"""
cn.Open
Set xlApp = New Excel.Application
MsgBox "Creat ready." & [a1].End(xlDown).Row, vbInformation
For i = 2 To [a1].End(xlDown).Row
Email = Cells(i, 11)
MsgBox "Creat ready." & Email, vbInformation
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.ActiveSheet
MsgBox "Creat is beginning." & i, vbInformation
xlSheet.Range("a1:k1").Value = Range("a1:k1").Value
xlSheet.Range("a2:k2").Value = Range("a" & i & ":k" & i).Value
outFile = "C:/Documents and Settings/" & Cells(i, 4) & ".xls"
MsgBox "Creat file name." & outFile, vbInformation
xlBook.SaveAs "C:/Documents and Settings/" & Cells(i, 4) & ".xls"
MsgBox "Creat file " & outFile & "is closing", vbInformation
xlBook.Close False
MsgBox "Creat file " & outFile & "close", vbInformation
With oItemMail
.Subject = "工资单"
.Body = "请确认你的工资单,若有问题在本月10号之前到财务处确认"
.Attachments.Add (outFile)
.Importance = olImportanceHigh
.Recipients.Add (Email)
.Sensitivity = olPersonal
.Send
End With
outFile = ""
Email = ""
Set oItemMail = oOutlookApp.CreateItem(olMailItem)
MsgBox "Mail" & (i - 1) & " is Created"
Next
cn.Close
Set cn = Nothing
MsgBox "all finish", vbInformation
End Sub
各位只要在工资表上加一个BUTTON,再把这段代码略加修改就可使用了
一、建立亲友通讯录
在工作表中建立一个包含不同收件人、主题、内容和附件的亲友通讯录。
二、使用宏实现自动发送电子邮件
打开“工具→宏→Visual Basic编辑器”,单击“插入→模块”插入一个模块,在“工程”窗口中双击插入的模块,打开它的代码窗口,并输入以下宏:
Sub 全自动发送邮件()
"要能正确发送并需要对Microseft Outlook进行有效配置
On Error Resume Next
Dim rowCount, endRowNo
Dim objOutlook As New Outlook.Application
Dim objMail As MailItem
"取得当前工作表与Cells(1,1)相连的数据区行数
endRowNo = Cells(1, 1).CurrentRegion.Rows.Count
"创建objOutlook为Outlook应用程序对象
Set objOutlook = New Outlook.Application
"开始循环发送电子邮件
For rowCount = 2 To endRowNo
"创建objMail为一个邮件对象
Set objMail = objOutlook.CreateItem(olMailItem)
With objMail
"设置收件人地址(从通讯录表的“E-mail地址”字段中获得)
.To = Cells(rowCount, 2)
"设置邮件主题
.Subject ="新年好![来自朋友弗人的问候] "
"设置邮件内容(从通讯录表的“内容”字段中获得)
.Body = Cells(rowCount, 3)
"设置附件(从通讯录表的“附件”字段中获得)
.Attachments.Add Cells(rowCount, 4)
"自动发送邮件
.Send
End With
"销毁objMail对象
Set objMail = Nothing
Next
"销毁objOutlook对象
Set objOutlook = Nothing
"所有电子邮件发送完成时提示
MsgBox rowCount-1 && "个朋友的问候信发送成功!"
End Sub
以上代码在Excel 2000中执行通过,并且对“通讯录”和“全自动发送邮件”宏代码稍作修改就可以完成任何形式的大量邮件的发送。
Dim OutlookApp As Outlook.Application
Dim OutlookItem As Outlook.MailItem
Set OutlookApp = New Outlook.Application
Set OutlookItem = OutlookApp.CreateItem(olMailItem)
On Error GoTo SendEmail_Error
With OutlookItem
.To = Receiver '收件人地址
.Subject = SubjectText '邮件主题
.Body = BodyText '邮件内容
.Attachments.Add AttachedObject '粘贴附件
.Send '发送邮件
End With
Exit Sub
SendEmail_Error:
MsgBox Err.Description
Resume SendEmail_Exit
End Sub