用VBA实现Excel打印成绩通知单
《中国电脑教育报》2005年第5期G5版与第28期E6版分别介绍了两种制作成绩通知单的方法,但存在一个共同的问题是:最后在成绩通知单格式上还得对每位考生进行一一设置,如果考生人数多同样显得繁琐。本文介绍利用VBA实现Excel打印成绩通知单,可以避免这一问题。 (点击查看更多软件使用技巧)
准备工作
为便于理解、记忆,将工作表的名称分别更改为“**成绩”、“通知单”。在“**成绩”工作表中是每个学生的**成绩A1至K64,在“通知单”工作表中建立一个空白表格,作为成绩通知单模板,如图1所示。
图1
编写代码
1. 进入VB编辑环境,依次点击“工具→宏→Visual Basic 编辑器”。
2. 定义触发事件。鼠标双击“工程”窗体中的“通知单”工作表,窗体右侧就出现了对应于该工作表的一些事件。选择响应“激活工作表”动作的事件activate,在窗体右侧的代码区域就出现了worksheet_activate()过程。接下来要做的就是在这个过程中添加代码了。
3.为事件添加代码如下:
Private Sub Worksheet_Activate()
Dim i As Integer '循环变量
For i = 1 To 100
If Sheet1.Cells(i, 1) = "" Then
'如果“**成绩”工作表的考号中没有内容,则退出循环
Exit For
End If
sbegin = (i - 1) * 5 + 1
send = i * 5
dbegin = i * 5 + 1
dend = (i + 1) * 5
'确定复制、粘贴“通知单”格式区域的起止行,5为复制区域的行数
Sheet2.Range(Cells(sbegin, 1), Cells(send, 11)).Copy _
Destination:=Sheet2.Range(Cells(dbegin, 1), Cells(dend, 11))
'将(Cells(sbegin, 1), Cells(send, 11))区域中的格式拷贝到(Cells(dbegin, 1), Cells(dend, 11))
Cells(sbegin + 3, 1).Value = Sheet1.Cells(i + 1, 1).Value
Cells(sbegin + 3, 2).Value = Sheet1.Cells(i + 1, 2).Value
Cells(sbegin + 3, 3).Value = Sheet1.Cells(i + 1, 3).Value
Cells(sbegin + 3, 4).Value = Sheet1.Cells(i + 1, 4).Value
Cells(sbegin + 3, 5).Value = Sheet1.Cells(i + 1, 5).Value
Cells(sbegin + 3, 6).Value = Sheet1.Cells(i + 1, 6).Value
Cells(sbegin + 3, 7).Value = Sheet1.Cells(i + 1, 7).Value
Cells(sbegin + 3, 8).Value = Sheet1.Cells(i + 1, 8).Value
Cells(sbegin + 3, 9).Value = Sheet1.Cells(i + 1, 9).Value
Cells(sbegin + 3, 10).Value = Sheet1.Cells(i + 1, 10).Value
Cells(sbegin + 3, 11).Value = Sheet1.Cells(i + 1, 11).Value
'将“**成绩”工作表的数据填入“通知单”相应位置
Next i
End Sub
检验成果
进入工作簿,按下“通知单”工作表,即可得到所有学生的成绩通知单了(如图2)。