论文部分内容阅读
在日常工作中,中小学教师经常需要将以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
一、准备数据
在该程序中要使用两个文件,一是用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