vba 网页数据抓取(《VBA信息获取与处理》专题五“利用VBA发送电子邮件” )
优采云 发布时间: 2021-12-25 01:17vba 网页数据抓取(《VBA信息获取与处理》专题五“利用VBA发送电子邮件”
)
【分享成果,正能量庆幸】坚持就是在做不到的时候坚持。做一件事并不难。难的是坚持;坚持不难,难的是坚持。坚持很难,但别无选择。坚持有坚持的痛苦,但也有它的魅力。那种美,倔强又绝对。如果你成功了,你的坚持就叫做执着。如果你失败了,你的坚持就叫做固执。但无论结果如何,都要勇敢地继续前进。你的坚持也有名字,无贵。
《VBA信息获取与处理》教程是我的第六套教程,现在是第一次修订。本套教程定位于最高级,是初级和中级完成后的教程。本教程内容为:跨应用信息获取、随机信息的使用、邮件发送、VBA上网数据抓取、VBA延时操作、剪贴板应用、Split函数扩展、工作表信息等应用交互、FSO对象的使用、工作表和文件夹信息的获取、图形信息的获取、工作表信息的自定义等功能。程序文件通过32位和64位Office系统测试。它非常抽象,更有研究价值。
全书两册,八十四讲。今天的内容是主题5“用VBA发送邮件”的第二讲:VBA发送工作表指定内容的邮件
第二节使用VBA发送EXCEL指定行内容的邮件
在上一课中,我们谈到了发送带附件的电子邮件。我们这里讲的是如何将工作表的指定内容发送到每个邮箱。虽然上一讲也讲了工作表指定区域的选择,但是这个Region要求是连续的,不连续的区域怎么处理呢?在这个演讲中,我将给出一个可以使用的解决方案。如下所示:
上表为“VBA职教网公社”员工工资表。这些列表应单独发送到以下电子邮件地址。这些地址是示例中的一个值,实际使用时可以设置。如何做这项工作?
1 邮件发送工作表不连续区域内容的思考分析
为了达到我们刚才提到的目的,我们先把整个薪水表放在一个工作表中,然后新建一个工作表,如下:
然后我们根据需要将工资表的内容复制到这个单独的工作表中,然后发送电子邮件。代码也可以借鉴上一讲的代码,这也是我的积木式编程思路。
2 邮件发送工作表不连续区域内容的代码实现
为了完成上面的思路,我们可以使用下面的代码,大家要注意本专题的代码,请参考:“005 worksheet.xlsm”程序文件,因为本教程是对VBA的改进,我会讲解的时候重点是思路分析,大家一定要仔细了解具体的实现。
我们看下面的代码:
子 myNZA()
将 myArray 调暗为变体
表格(“Sheet3”)。选择
'关闭屏幕刷新和重复触发事件
Application.ScreenUpdating = False
Application.EnableEvents = False
'将工资表预读到数组中
myArray = Sheets("salary table").Range("a1").CurrentRegion
对于 i = 3 到 UBound(myArray)
'拆分数组的值并将其写入工作表
Range("a3:i3") = Application.Index(myArray, i)
'选择发送给员工的工资单内容
范围(“A1:H3”)。选择
'发布标题说明
ActiveWorkbook.EnvelopeVisible = True
'电子邮件设置
使用 ActiveSheet.MailEnvelope
strText = myArray(i, 1) & "Hello:" & vbCrLf & "Here is you" & _
myArray(i, 2) & "月薪详情,请查收!"
'在邮件正文中设置添加的可选介绍字段文本,并在标题上设置评论
.Introduction = strText
使用 .Item
.To = myArray(i, 9)
.Subject = myArray(i, 2) & "月薪明细"
。发送
结束于
结束于
下一个
ActiveWorkbook.EnvelopeVisible = False
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox "好的!"
结束子
代码截图:
3 VBA代码实现过程说明
1) myArray = Sheets("salary table").Range("a1").CurrentRegion 该语句是将工资表预先存储在数组中,以达到更快读取数据的效果。
2)Range("a3:i3") = Application.Index(myArray, i) 这行语句实现了将数组中的值读取到行发送的电子邮件的工作表中。注意上面语句Index(myArray,i)的写法,有不清楚的请参考我第三套教程《VBA数组与字典解法》中的知识点
3)Range("A1:H3").Select 这行语句是对邮件内容的设置,会体现在邮件正文中。
4).Subject = myArray(i, 2) & "月薪明细" 这行句子就是邮件主题的内容。
5)使用 ActiveSheet.MailEnvelope
strText = myArray(i, 1) & "Hello:" & vbCrLf & "Here is you" & _
myArray(i, 2) & "月薪详情,请查收!"
'在邮件正文中设置添加的可选介绍字段文本,并在标题上设置评论
.Introduction = strText
使用 .Item
.To = myArray(i, 9)
.Subject = myArray(i, 2) & "月薪明细"
。发送
结束于
结束于
以上代码完成了邮件的设置和发送。
6)对于 i = 3 到 UBound(myArray)
…………
下一个
上面的语句就是让for next循环的循环体多次循环,达到给大家发邮件的目的。
其他的句子,我就不详细解释了,上一课已经涉及到了。
4 VBA代码实现效果
最后我们看一下代码的实现效果,点击:
最后我们看一下工作表界面和邮件接收界面:
工作表界面:
邮件接收接口:
以上完全符合我们的初始要求,但是一定要注意OUTLOOK在发送邮件时处于打开状态。
本节知识点:如何向工作表的不连续区域发送邮件?如何实现多封邮件的自动发送?
本主题的参考程序文件:005 worksheet.XLSM
我20多年的VBA实践经验都浓缩在下面的教程中,教程学习顺序: