批量打印学生成绩工具制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
批量打印学生成绩工具制作
在学校工作中,每一次考试后免不了需要进行成绩分析,给每一个班打印成绩表。在给班级打印成绩表时还需根据每个班的数据调整行高和列宽。这些工作都是重复,锁碎的。我们可以做成一个模板,计算好各班均分,优生率等数据。这样下次分析时只需要把学生成绩复制到模板中就可以实现秒算成绩分析,再利用wps+vba实现批量打印班级的成绩表。原来需要加班加点的工作,现在可以几分钟内完成了。剩下时间可以喝茶,休息了。
下面是我制作批量打印工具的过程
1.准备工作
(1)准备一个excel工作薄,工作表有:文科成绩,理科成绩,基本设置,统计表,班级成绩表。这些工作表用来存放学生的成绩,班级的设置等信息。
班级基本设置部分
理科学生成绩
(2)办公软件,office或wps。特别说明,由于批量打印需要用vba来编写一些让电脑操作的过程,所以在使用office或wps时需要允许宏运行。Wps不直接支持vba,可以下载插件来实现对宏的支持,下载地点可以百度,或上wps论坛查找。
如上图所示,在“开发工具”选项卡中有“宏”和“vb编辑器”
2.vba组织结构
如下图,包含ThisWorkbook应用程序工作薄,5个工作表,一个窗体,一个模块
2.1打印控制窗体(UserForm)
窗体中包含三个按钮,分别命名为”选中全部班
级”,”CommandButton2”,”CommandButton3”。可以根据自己的习惯命名
2.2模块内容
包含两个过程”复制班级成绩(n As Integer)”,”页面设置()”
2.2.1 过程1
Sub 复制班级成绩(n As Integer)
Dim shtdata As Worksheet '成绩表
Dim row_end As Integer '成绩表最后一行的行号
Dim col_end As Integer '成绩表最后一列的列号
Dim calss_col As Integer '查找“班级”列的列号
Dim str As String '定义一个字符串,表示文科或者理科工作表
Dim str_col As Integer
'Dim n As Integer '打印班级工作表的班级的序号
str_col = Worksheets("基本设置").Range("4:4").Find(打印控
制.Controls("myCheckBox1" & n).Caption,
SearchOrder:=xlByColumns).Column
str = Worksheets("基本设置").Cells(5, str_col).Value '通过查找获得班级所属的类型是文科还是理科
Dim i As Integer'循环变量
Dim j As Integer '循环变量
j = 3
Worksheets("班级成绩表").Range("2:100").Delete '先删除班级成绩表中2-100行的内容。
Set shtdata = Worksheets(str & "成绩")
row_end = shtdata.Cells(Rows.Count, "a").End(xlUp).Row '利用end方法获取文科或理科成绩表的最后一行行号
col_end = edRange.Columns.Count '获取文科或理科成绩表的最后一列列号
calss_col = shtdata.Range("1:1").Find("班级",
SearchOrder:=xlByColumns).Column '在数据表中查找班级列号Sheet5.Cells(1, 1).Value = 打印控制.Controls("myCheckBox1" &
n).Caption
shtdata.Rows(1).Copy '复制成绩表的第一行数据
Worksheets("班级成绩表").Cells(2, 1).PasteSpecial xlPasteAll '把成绩表的第一行数据粘贴到班级成绩表的第2行
For i = 1 To row_end
If shtdata.Cells(i, calss_col).Value = 打印控
制.Controls("myCheckBox1" & n).Caption Then
shtdata.Rows(i).Copy
Worksheets("班级成绩表").Cells(j, 1).PasteSpecial xlPasteAll
j = j + 1
End If
Next i
循环设置行高
For i = 1 To j - 1
Rows(i).RowHeight = 822 / (j - 1)
Next i
设置1到3列列宽
For i = 1 To 3
Columns(i).ColumnWidth = 7.5
Next i
设置第3列以后的列的列宽
For i = 4 To col_end
Columns(i).ColumnWidth = 55 / (col_end - 3) Next i
End Sub
2.2.2 过程2
Sub 页面设置()
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.Orientation = xlPortrait
'.FitToPagesWide = 1设置水平居中打印
'.FitToPagesTall = 1设置垂直居中打印
.FirstPageNumber = True
.LeftMargin = 14.346
.RightMargin = 14.346
.TopMargin = 10
.BottomMargin = 10
.HeaderMargin = 16.850394
.FooterMargin = 16.850394