用VBA批量生成打印考生成绩通知单

2009-03-02 02:43向德海
中小学信息技术教育 2009年2期
关键词:通知单成绩单书签

向德海

在日常工作中,中小学教师经常需要将以Excel格式录入的考生成绩数据转换成Word文本的成绩通知单,并将考生成绩单批量打印后发至每一位考生手中。以往,我们是借助于Word的邮件合并功能来解决这一问题,经过笔者的探索,运用ExcelVBA,打开Word模板文件也可实现上述目的。

一、准备数据

在该程序中要使用两个文件,一是用Excel制作的学生成绩表,另一个是用Word制作的“成绩通知单”。具体步骤如下。

第一步,在工作簿中新建一个工作表,命名为“Temp”,将成绩表中第1行表头复制到Temp表第1行中保存,命名该工作簿为“成绩数据”。

第二步,打开Word2003,建立文档,并进行相应的版式和格式设置。

第三步,将光标定位在“同学的家长”前面,执行“插入→书签”命令,打开“书签”对话框,在“书签名”中输入“students”,单击“添加”按钮,在光标处添加一个书签,VBA程序可查找书签,并在书签处插入学生姓名。用同样的方法,在“学号”对应表格中插入书签“xuehao”,在“姓名”、“语文”、“数学”、“英语”、“体育”、“总分”、“名次”对应单元格中分别插入书签“xingming”、“yuwen”、“shuxue”、“yingyu”、“tiyu”、“zongfen”、“mingci”。在“教师评语”的下一行插入书签“pingyu”。

第四步,将制作好的文档和“成绩数据”工作簿保存在同一文件目录下,命名为“成绩通知单.dot”模板文件,关闭文档。

二、编写VBA代码

数据文件准备好后,就可以在Excel中编写VBA代码了,调用Word服务程序来生成并打印每个学生的成绩通知书。

打开刚才建立的“成绩数据”工作簿,在“成绩表”工作表中,执行“工具→宏→Visul Basic编辑器”命令,在Visul Basic编辑器中选择“插入→添加模块”,插入模块1,在代码窗口输入以下代码:

Dim iCount As Integer

Sub 生成打印成绩单()

Application.ScreenUpdating = False ' 关闭执行程序时发生的屏幕更新,加快运行速度。

On Error GoTo Pro1:

Sheets("成绩表").Select

iCount = [A65536].End(xlUp).Row '计算数据行数

For i = 2 To iCount

Range(Cells(i, 1), Cells(i, 9)).Select'选择单元格区域

Selection.Copy

Sheets("Temp").Select '选择Temp工作表

Range("A2").Select

ActiveSheet.Paste'粘贴到2行

Application.CutCopyMode = False

CreateWord

Sheets("成绩表").Select

Next i

Pro1:

End Sub

Sub CreateWord()

On Error GoTo Pro2:

Dim WordAPP As Object, myWord As Object '声明Word应用程序对象及文档对象

Set WordAPP = CreateObject("Word.Application")

Set myWord = WordAPP.documents.Open(Filename:=Application.ActiveWorkbook.Path & "成绩通知单.DOT") '打开模版文件

WordAPP.Visible = True'设置应用程序Word可见

With WordAPP.Selection'开始向WORD文件写入内容

myWord.Bookmarks("students").Range = Worksheets("Temp").Range("B2")

myWord.Bookmarks("xuehao").Range = Worksheets("Temp").Range("A2")

myWord.Bookmarks("xingming").Range = Worksheets("Temp").Range("B2")

myWord.Bookmarks("yuwen").Range = Worksheets("Temp").Range("C2")

myWord.Bookmarks("shuxue").Range = Worksheets("Temp").Range("D2")

myWord.Bookmarks("yingyu").Range = Worksheets("Temp").Range("E2")

myWord.Bookmarks("tiyu").Range = Worksheets("Temp").Range("F2")

myWord.Bookmarks("zongfen").Range = Worksheets("Temp").Range("G2")

myWord.Bookmarks("mingci").Range = Worksheets("Temp").Range("H2")

myWord.Bookmarks("pingyu").Range = Worksheets("Temp").Range("I2")

End With

WordAPP.PrintOut Copies:=1, Collate:=True 5打印文档

myWord.Saved = True5不保存文档

myWord.Close'关闭并退出当前Word文档

WordAPP.Quit

Set myWord = Nothing

Set WordAPP = Nothing

Pro2:

End Sub

输入完成后,保存关闭VBA编辑窗口,返回到“成绩表”工作表。

三、生成通知单

运行以上代码就可以自动生成并打印每位考生的成绩通知单了。为便于程序执行,我们还可在“成绩表”工作表中添加一个按钮。执行“视图→工具栏→控件工具箱”命令,单击“命令按钮”,在工作表中画出一个命令按钮。右击命令按钮,在出现的快捷菜单中,选择“属性”选项,打开“属性”设置对话框。切换到“按分类序”标签下,展开“外观”选项,将“Caption”选项右侧的字符修改为“生成打印成绩单”,为按钮设置颜色及字体属性。再展开“杂项”选项,将“PrintObject”选项设置为“False”,设置完成后,关闭“属性”对话框。

双击刚才添加的命令按钮,再次进入VBA编辑状态,将“生成打印成绩单”(上述代码中的宏名称)字符输入到已经出现的两行代码之间:

Private Sub CommandButton1_Click()

生成打印成绩单

End Sub

输入完成后,关闭VBA编辑状态,返回工作表中。调整按钮的大小,将按钮定位在表格中的适当位置,再按下“控件工具箱”上的“退出设计模式”按钮。

单击“生成打印成绩单”按钮,执行前面编写的代码,就可以自动生成并打印每一位考生的成绩通知单。

在上述程序中,通过循环对每一位学生生成一份成绩通知书。如果学生人数很多,该程序运行可能较慢。我们还可以添加代码保存所有成绩单到指定的路径,有兴趣的读者可以自己去体会。

(作者单位:湖北荆门市人事考试中心)

猜你喜欢
通知单成绩单书签
两份田租通知单:慈善是社会发展的重要保障
两份田租通知单
国家标准勘误更正通知单
透明书签
十一月书签
十一月书签
贰月书签
2018上半年纠“四风”成绩单
晒晒全面深改成绩单
成绩单的妙用