vba 网页数据抓取(《VBA信息获取与处理》专题五“利用VBA发送电子邮件” )

优采云 发布时间: 2021-12-25 01:17

  vba 网页数据抓取(《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实践经验都浓缩在下面的教程中,教程学习顺序:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线