乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 如何通过WAP发送邮件?-excel 自动发邮件,excel达到条件自动发邮件

如何通过WAP发送邮件?-excel 自动发邮件,excel达到条件自动发邮件

作者:乔山办公网日期:

返回目录:excel表格制作


按照下图整理工资明细表
1,列数可自行新增删除;
2,如果整理的数据列,无法发送邮件的请把表头内添加大写字母“X”;
3,工作e5a48de588b6e799bee5baa6366表名称用作了邮件主题,发送前请修改工作表名称;

启用开发工具选项卡;插入命令控件;修改控件名称及显示名;

进入VBA编程界面;复制以下代码到编辑窗口。

Private Sub 全自动发送邮件_Click()
'要能正确发送并需要对Microseft Outlook进行有效配置
On Error Resume Next
Dim rowCount, endRowNo, endColumnNo, sFile$, sFile1$, A&, B&
Dim objOutlook As Object
Dim objMail As MailItem
'取得当前工作表数据区行数列数
endRowNo = ActiveSheet.UsedRange.Rows.Count
endColumnNo = ActiveSheet.UsedRange.Columns.Count

'取得当前工作表的名称,用来作为邮件主题进行发送
sFile1 = ActiveSheet.Name
'创建objOutlook为Outlook应用程序对象
Set objOutlook = CreateObject("Outlook.Application")

'开始循环发送电子邮件
For rowCount = 2 To endRowNo
'创建objMail为一个邮件对象
Set objMail = objOutlook.CreateItem(olMailItem)

With objMail

'设置收件人地址,数据源所在列数
.To = Cells(rowCount, 5)

'设置抄送人地址(从通讯录表的'E-mail地址'字段中获得)
'.CC = Cells(rowCount, 0)
'设置邮件主题,取值工作表名,
.Subject = sFile1
'设置邮件内容(从通讯录表的“内容”字段中获得)
'align 单元格文本显示方式 left(向左)、center(居中)、right(向右),默认是center, width-宽 height-高 border 单元格线粗细,bordercolor返回或设置对象的边框颜色
'colSpan是一种编程语言,其属性可设置或返回表元横跨的列数

sFile = "<tr>您好! 以下是您" + sFile1 + ",请查收!</tr>"
sFile = sFile + "<table align='left' width='500' height='25' border= 1 bordercolor='#000000'> <tbody> "
sFile = sFile + "<tr> <td colspan ='4' align='center'> 工资表</td> </tr> "
B = 1
For A = 1 To endColumnNo
'数据表头中添加“X”后将不发送此字段
If Application.WorksheetFunction.CountIf(Cells(1, A), "*X*") = 0 Then
If B = 1 Then
sFile = sFile + "<tr> <td width='20%' height='25'> "
+ Cells(1, A).Text + " </td> <td width='30%'
height='25'> " + Cells(rowCount, A).Text + "</td>"
B = 0

Else
sFile = sFile + "<td width='20%' height='25'> " + Cells(1,
A).Text + " </td> <td width='30%' height='25'> " +
Cells(rowCount, A).Text + "</td> </tr>"
B = 1
End If
End If
Next

.HTMLBody = sFile

'设置附件(从通讯录表的“附件”字段中获得)
.Attachments.Add Cells(rowCount, 24).Value
'自动发送邮件
.Send
End With

'销毁objMail对象
Set objMail = Nothing
Next
'销毁objOutlook对象
Set objOutlook = Nothing
'所有电子邮件发送完成时提示
MsgBox rowCount - 2 & "个员工的工资单发送成功!"

End Sub

大功告成,测试图如下

提示:用户定义类型未定义异常处理办法
处理办法:点击工具-引用-勾选<microsoft outlook 14.0 object library>

提示:点击发送OUTLOOK安全提示
处理办法:点击文件-选项-信任中心-信任中心设置-编程访问-勾选从不向我发出可以活动警告

提示:编程访问无法勾选显示灰色时
处理办法:控制面板-用户帐号-点击用户帐号-更改用户账户控制设置-调到从不通知,重启电脑,调整完毕OUTLOOK设置可以再调整回来。

步骤阅读

您好,登录邮箱wap端,然后点击发邮件,然后输入收件人地址和编辑邮件内容,编辑完成后发送邮件即可。
a.) 打开Excel,新建Book1.xlsx
b.) 填入下面的内容,
第一列:接收人,第二列:邮件标题,第三列:正文,第四列:附件路径
注意:附件路径中可以有中文,但是不能有空格
这里你可以写更多内容,每一行作为一封邮件发出。
注意:邮件正文是黑白文本内容,不支持加粗、字体颜色等。(如果你需要支持彩色的邮件,后面将会给出解决办法)
2.

编写宏发送邮件
a.) Alt + F11 打开宏编辑器,菜单中选:插入->模块
b.) 将下面的代码粘e69da5e887aae799bee5baa6e79fa5e98193361贴到模块代码编辑器中:
Public Declare Function SetTimer Lib "user32" _
(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Public Declare Function KillTimer Lib "user32" _
(ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Function WinProcA(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal SysTime As Long) As Long
KillTimer 0, idEvent
DoEvents
Sleep 100
'使用Alt+S发送邮件,这是本文的关键之处,免安全提示自动发送邮件全靠它了

方法/步骤

1
创建一个名字为“出货清单”Excel表单,先制作一个出货记录表格。
您可按需要自行制作,做成一行一条目。
在正常内容最后加一行用于选择是否需要自动发送邮件。

2
再增加一个名字为"清单"的Excel表单。用于列举各项常用重复内容。
例子中列举出货地址清单,联系人联系方式清单,还有料号清单。

对各个清单定义范围。这里以PNlist 命名来定义举一例,各位可按需定义。
料号清单范围定义 =清单!$G$2:OFFSET(清单!$G$1,COUNTA(清单!$G:$G)-1,0)

COUNTA(清单!$G:$G) 是用于计算G列有多少行有内容,即有多少个P/N清单。 例子计算结果为4
OFFSET($G$1,4-1,0)计算结果即为$G$4.

所以PNlist 就被成功定义为=清单!$G$2:$G$4

定义地址清单:Addresslist =清单!$A$2:offset($A$1,counta($A:$A)-1,1)
定义联系人清单:Namelist =清单!$D$2:OFFSET(清单!$D$1,COUNTA(清单!$D:$D)-1,1)

通过定义的清单来校验数据, 从而保证误输入。通过下来选择也可提高效率。

新建一个名为“模板”的Excel表单,定义要通过邮件发送的内容的模板。
后续会通过宏来拷贝模板,填充内容,调用outlook发送。

注意。 模板请放在第一行以下,因为第一行会用与拷贝发送内容过来做转制。

按如下图片步骤录制一个名为"shipment"的宏。
宏的录制是录制单条操作的内容,操作内容根据自己需要按步骤录制。
多条循环操作需稍微加几句代码。
下一步骤会介绍。

如下代码供参考:
Sub shipment()' shipment arrangement

'如下为录制内容
Sheets("出货记录").Select
Range("B3:I3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("邮件模板").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("G3:H12").Select
Application.CutCopyMode = False
Selection.Copy
Range("A3").Select
Selection.Insert Shift:=xlDown
Range("B3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-2]C[-1]"
Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-3]C[1]"
Range("B5").Select
ActiveCell.FormulaR1C1 = "=R[-4]C[2]"
Range("B6").Select
ActiveCell.FormulaR1C1 = "=R[-5]C"
Range("B7").Select
ActiveCell.FormulaR1C1 = "=R[-6]C[4]"
Range("B8").Select
ActiveCell.FormulaR1C1 = "=R[-7]C[5]"
Range("B9").Select
ActiveCell.FormulaR1C1 = "=R[-8]C[3]"
Range("B10").Select
ActiveCell.FormulaR1C1 = "=R[-9]C[6]"
Range("B3:B10").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("A1:H1").Select
Application.CutCopyMode = False
Selection.ClearContents
Sheets("出货记录").Select
Range("J3").Select
ActiveCell.FormulaR1C1 = "Closed"
Range("A3:J3").Select
Range("J3").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.4526
.PatternTintAndShade = 0
End With
'如上为录制内容
End Sub

打开录制的宏添加循环代码。
按图片步骤及语句在录制范e79fa5e98193e59b9ee7ad94337围前后添加循环代码。
Dim i As Integer
Dim j As Integer
Dim g As Integer
Application.ScreenUpdating = False
Sheets("出货记录").Select
i = 1
j = Application.WorksheetFunction.CountA(Range("A:A")) + 1
g = 0
'变量i 用于循环,变量j用于判断有多少行需要循环,变量g 用于邮件发送时定义有多少行需要发送
For i = 1 To j
If Range("j" & i).Value = "Y" Then
'如下为录制内容
-------------
'如上为录制内容
g = g + 1
Else
End If
Next i

录制范围部分代码需按图片更新成变量。

再添加邮件发送代码,其中有定义一个名为的 RangetoHTML()的函数。

' 以下语段用于发送邮件
Sheets("出货记录").Select
If g = "0" Then
MsgBox "No new shippment set to Y "
Else
g = 10 * g + 2
Dim OutApp As Object
Dim OutMail As Object
Dim MailBody As Range
Sheets("邮件模板").Select
Set MailBody = Range("A3:B" & g)
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
On Error Resume Next
With OutMail
.to = ""
.CC = ""
.BCC = ""
.Subject = "Shipment Arrangement"
.BodyFormat = Outlook.OlBodyFormat.olFormatHTML
.HTMLBody = RangetoHTML(MailBody)
.Display
End With
On Error GoTo 0
End If
Sheets("出货记录").Select
Application.ScreenUpdating = True

RangetoHTML()的函数 代码申明
将如下代码拷贝粘帖到End Sub()之后

Public Function RangetoHTML(rng As Range)
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"
rng.Copy
Set TempWB = Workbooks.Add(1)
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
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

Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center
x:publishsource=", _
"align=left x:publishsource=")
TempWB.Close savechanges:=False
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function

代码完成。 只需创建一个按钮方便调用此宏即可。

增加条目后把对应行内邮件通知列改成"Y",然后点“发送邮件”按钮即可弹出邮件并出货通知表单内更改状态。

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网