- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用EXCEL VBA实现图表批量生成并发送
业务需求
office word2007的邮件合并功能是财务、文秘类工作经常使用的功能之一,该功能可以生成包含可变内容的批量邮件文档,广泛适用于发送工资条、成绩单、通知书等,这里不再赘述。笔者所在单位最近为加强员工考核管理工作力度,提出了一个类似于邮件合并功能,但使用邮件合并功能却不能实现的需求,下面用文字结合图表描述:
1.将员工百分制考核结果批量以图表(折线图)反应出来,每一条员工数据均生成一个类似于下图右侧的图表。
(图1)
2.使用类似于邮件合并方式实现员工考核图表的批量发送,将生成的图表插入邮件正文分别发送给每位员工。
(图2)
解决思路
思路一:使用VS.net+Sqlserver(或ACCESS等,下同)开发一个网站,设置好权限,允许员工查看自己的反馈结果。
思路评价:可行,但达不到设想中的推送效果。
思路二:使用VS.net+Sqlserver开发一个系统,内置图表模板,图表基于固定区域数据生成;为每位员工复制一份作为报表,将该员工数据填写到固定区域;将每位员工的报表作为附件发送给每位员工。
思路评价:可行,但开发量大,效果不直观。
思路三:使用VS.net+Sqlserver开发一个系统,使用VS2008版以上自带控件或第三方控件如dotnetcharting,为每位员工生成一张图片,将该图片插入邮件发送给每位员工。
思路评价:可行,但开发量大。
思路四:使用excel VBA为每位员工生成一张图片,将该图片插入邮件发送给每位员工。这个思路一开始并没有列入考虑范围,主要原因是当时认为在excel中为每位员工生成一个图表是不可能的,即使能生成也没办法脱离excel工作薄,分别和员工对应起来并发送。最终采用本思路,是缘于笔者发现VBA可以非常容易地把图表导出为图片。
思路评价:可行,事实证明,开发量比想象的小很多。
开发环境准备
1.在运行该程序的电脑上安装Office Excel2007或以上版本;
2.正确配置OUTLOOK使之能够正常发送邮件;
3.打开Excel2007新建工作薄,把测试数据输入到sheet1工作表,把工作薄保存到工作目录(为方便后文描述,这里的目录设为“E:\excel-vba”),在该目录下新建“imgfile”子目录,以存放图片。示例数据如下:
姓名
德
能
勤
绩
邮件主题
邮件地址
附件路径
张三01
20
23
16
20
员工考核反馈
zhugq-zzu@
E:\excel-vba\imgfile\张三01.jpg
张四02
25
20
23
23
员工考核反馈
zhugq-zzu@
E:\excel-vba\imgfile\张四02.jpg
张五03
24
16
25
18
员工考核反馈
zhugq-zzu@
E:\excel-vba\imgfile\张五03.jpg
张三02
25
20
23
23
员工考核反馈
zhugq-zzu@
E:\excel-vba\imgfile\张三02.jpg
张四03
25
20
23
23
员工考核反馈
zhugq-zzu@
E:\excel-vba\imgfile\张四03.jpg
平均值
23
19
22
20
注意:附件路径是个公式:=concatenate(“E:\excel-vba\imgfile\”,A1,”.jpg”) 含义是图片以员工姓名命名,这意味着员工姓名不可重复。
4.完成宏安全设置,如图所示:
(图3)
实现过程
这个业务需求实现包含两个难点,一是为每位员工生成对应的图片;二是批量发送带图片的邮件。基于这两点,笔者在excel工作薄中设置了两个按钮,编写了两段代码,分别对应上述两个问题。事实上,这两段代码完全可以整合到一起,这里为了方便理解,还是分开介绍。笔者采取代码中加入注释的方式帮助大家理解代码含义。
第一步,在sheet1中加入两个按钮,分别命名为“批量生成图表”和“批量发送邮件”。
第二步,分别为两个按钮指定如下宏代码:
Sub 批量生成图表()
Dim myChart, Ra As ChartObject
Dim myFileName As String
Dim i, j As Integer
With Sheet1
先虚加一个图表对象,解决下文循环开头删除空集问题
Set myChart = .ChartObjects.Add(520, 40, 400, 250)
取数据总行数,第一行为标题,最后一行为平均值
j = Sheet1.[b65536].End(xlUp).Row
您可能关注的文档
- 史上最全最详细的win7下IIS+Asp或.net的配置.doc
- 史上最伟大的十个公式.pdf
- 史上最详细的Gambit教程 不看后悔.doc
- 史上最详细矩阵键盘原理.pdf
- 史上最详细煤化工流程图(超高清).doc
- 史屯小学腰鼓队发展规划.doc
- 史学概论复习.ppt
- 史学概论简答题——第二章.doc
- 史学概论六~十一章(庞卓恒).doc
- 史学理论和方法--第五章----历史工作者的学养.ppt
- 《GB/T 12668.7202-2024调速电气传动系统 第7-202部分:电气传动系统的通用接口和使用规范 2型规范说明》.pdf
- 《GB/T 15692-2024制药机械 术语》.pdf
- GB/T 15692-2024制药机械 术语.pdf
- 中国国家标准 GB/T 15692-2024制药机械 术语.pdf
- GB/T 19633.1-2024最终灭菌医疗器械包装 第1部分:材料、无菌屏障系统和包装系统的要求.pdf
- 中国国家标准 GB/T 19633.1-2024最终灭菌医疗器械包装 第1部分:材料、无菌屏障系统和包装系统的要求.pdf
- 《GB/T 19633.1-2024最终灭菌医疗器械包装 第1部分:材料、无菌屏障系统和包装系统的要求》.pdf
- 《GB/T 30117.1-2024非相干光产品的光生物安全 第1部分:通用要求》.pdf
- 《GB/T 33348-2024高压直流输电用电压源换流器阀 电气试验》.pdf
- GB/T 33348-2024高压直流输电用电压源换流器阀 电气试验.pdf
文档评论(0)