大家好,我在前几篇文章中介绍到了VBA的一些基础操作,今天我们用之前介绍的一些功能来做一个简单的小例子。
场景:某学校要根据学生本次期末考试的总成绩评定出”一等奖、二等奖、三等奖“,并授予其奖状以资奖励。
如上图所示,这个是学生本次期末考试的成绩数据表。
下面的截图,是需要打印的奖状的模板。
我们先来看代码。代码中用到了这样几个功能。
1、如何正确获取到最大行号(最后一行有数据的行所在的行号)
2、VBA给指定单元格赋值
3、VBA设置指定单元格字体的大小
4、打印指定Sheet
其中前3个,我在之前的文章中都讲过了,这里就不再重复讲解了。
打印指定Sheet所用的方法是:Sheet对象.PrintOut
Function getEndRowNumber(wk)
Dim num_down
num_down = wk.Range("A1").End(xlDown).Row
getEndRowNumber = num_down
End Function
Sub batchPrintTemplate()
Dim srcWk, descWk As Worksheet
Dim end_num, i, total_num, str_label, prize_content
Set srcWk = ThisWorkbook.Worksheets("数据")
Set descWk = ThisWorkbook.Worksheets("奖状模板")
end_num = getEndRowNumber(srcWk)
For i = 2 To end_num
total_num = srcWk.Range("B" & i).Value + srcWk.Range("C" & i).Value + srcWk.Range("D" & i).Value
If total_num >= 280 Then
str_label = "一等奖"
ElseIf total_num >= 270 Then
str_label = "二等奖"
ElseIf total_num >= 240 Then
str_label = "三等奖"
Else
str_label = ""
End If
If Len(str_label) > 0 Then
prize_content = "恭喜 " & srcWk.Range("A" & i).Value & " 同学" & vbCrLf
prize_content = prize_content & "在 2022年度 期末考试中" & vbCrLf
prize_content = prize_content & "获得 三等奖"
descWk.Range("A11").Value = prize_content
descWk.Range("A11").Font.Size = 22
descWk.PrintOut
End If
Next i
End Sub
代码中,我把1,2,3等奖的总成绩设置为>=280,270--279,240--269.
我们定义变量total_num用来保存B,C,D列3门课程的总成绩。
然后再根据total_num来进行判断能够获得几等奖。如果总成绩不够240的,是不打印奖状的。
这里我们通过 For i=2 to end_num来对所有学生数据进行循环处理。
descWk.PrintOut是把”奖状模板“这个Sheet送到打印机去打印。
关于奖状模板在进行设计的时候,有一个小技巧跟大家共享一下。
我们通过EXCEL设置Sheet的背景的时候,如果图片过小,会被重复显示。如下图所示:
那如何才能隐藏其他不需要的呢?我们可以利用EXCEL的背景填充功能来实现。
首先我们把Sheet的整个Sheet的背景色填充为白色,然后再将需要打印部分,也就是一个奖状的位置的背景色填充为无颜色,这样就可以很好的隐藏其余部分了。
好了,今天就跟大家分享到这。如果有想下载这个demo的,可以去下载中心下载。
本文含有隐藏内容,请 开通VIP 后查看