4.5.5-代码解析:L112_Fun_考核成绩

该函数的功能是从考核成绩中获取该员工的成绩,因为存在多次考核结果,所以需要遍历该工作表,找到每一个成绩,逐一写入到生成的员工档案中。代码核心逻辑如下:

  • 1)清空员工档案模板中的原数据

  • 2)对考核成绩工作表进行循环,找到该员工的成绩

  • 3)设置一个初始列号,每写入一个信息,列号+1,确保信息逐一写入

代码如下

1   Function L112_Fun_考核成绩(shtOutput, employeeName)
2       ' 清空原数据
3       shtOutput.Range("J10:O11").ClearContents
4       
5       Set sht = ThisWorkbook.Worksheets("考核成绩")
6       maxRow = sht.Cells(Rows.Count, "B").End(xlUp).Row
7       
8       col = 10
9       flag = 0
10      For i = 2 To maxRow Step 1
11          employeeNameDB = sht.Cells(i, "B")
12          If employeeNameDB = employeeName Then
13              yearInfo = sht.Cells(i, "C")
14              noteInfo = sht.Cells(i, "D")
15              
16              shtOutput.Cells(10, col) = yearInfo
17              shtOutput.Cells(11, col) = noteInfo
18              
19              col = col + 1
20              
21              flag = 1
22          End If
23      Next i
24      
25      If flag = 1 Then
26          returnTips = "找到人员考核成绩"
27      Else
28          returnTips = "未找到人员考核成绩"
29      End If
30      
31      L112_Fun_考核成绩 = returnTips
32      
33  End Function

关键代码解读

1)第8行col = 10。这部分目标是为显示图4-23的柱状图,柱状图的数据区域是J10-O12,只需要更新这部分数据即可。也就是说数据是从第10列(J列)开始录入的,所以在这里我们设置了一个初始值,每增加一个新的值列号+1,第19行实现了这部分功能,col = col + 1。其实在本示例中假设柱状图关联的数据范围是固定的,也就是说如果有多次考核成绩,超过J10-O12区域,那么超过的区域是无法在柱状图中显示的,这个跟想要的显然有一段差距。这里我们就需要新增一个功能,就是动态变化柱状图关联的单元格区域。这一部分功能在后续再介绍。

2)第9行flag = 0。我们查找某员工的考核成绩时,有一种可能是该员工可能刚入职,没有考核成绩,所以需要一个标识符flag,告知是否至少找到一个考核成绩。第21行,flag = 1,告诉后续环节找到了一个成绩。后续只需通过判断flag的值就可以区分是否有考核成绩被找到。


../_images/4-23.png

图4-23 考核成绩柱状图显示