4.5.4-代码解析:L111_Fun_人员信息¶
该函数的功能是从人员信息工作表中寻找当前人员的信息,人员信息表结构如图4-18所示。可知人员信息表,每名员工有一行信息,只需要找到该员工所处的行号就可以获取员工信息,将这些信息写入新生成的员工档案表即可,效果如图4-19所示。核心代码逻辑如下:
1)根据姓名,寻找该名员工信息所在行号
2)根据行号,获取该员工的籍贯、毕业院校、专业、手机号、通讯地址、学历信息
3)将以上信息按照固定位置写入生成员工个人档案表中
代码如下
1 Function L111_Fun_人员信息(shtOutput, employeeName)
2 ' 从人员信息表中获取基础信息
3 Set shtPerson = ThisWorkbook.Worksheets("人员信息")
4 Set shtRng = shtPerson.Range("B:B")
5 pos = Application.Match(employeeName, shtRng, 0)
6
7 If IsError(pos) Then
8 returnTips = "未找到人员基础信息"
9 Else
10 birthPlace = shtPerson.Cells(pos, "C")
11 school = shtPerson.Cells(pos, "D")
12 major = shtPerson.Cells(pos, "E")
13 cellphone = shtPerson.Cells(pos, "F")
14 contactAddress = shtPerson.Cells(pos, "G")
15 academicCredentials = shtPerson.Cells(pos, "H")
16
17 shtOutput.Range("F2") = birthPlace
18 shtOutput.Range("D3") = school
19 shtOutput.Range("F3") = major
20 shtOutput.Range("D4") = cellphone
21 shtOutput.Range("F4") = academicCredentials
22 shtOutput.Range("D5") = contactAddress
23
24 returnTips = "人员信息已找到"
25 End If
26
27 L111_Fun_人员信息 = returnTips
28 End Function
关键代码解读
1)第5行:pos = Application.Match(employeeName, shtRng, 0)。获取该员工在员工信息工作表所在的行数。这里的0表示精确匹配,就是必须一模一样。这里的Application不能省略,若省略会报错,如图4-20所示。Application表示该函数为工作表函数,在Excel表中可以直接使用该公式,如图4-21所示。在VBA中存在一些这样特别的函数,只需要使用时加上Application即可。
2)第7行:IsError(pos),判断pos是否是错误信息。图4-22示例中,采用match函数未找到需要的信息时,返回一个错误信息Error 2042。用IsError来识别这个错误,如果没有考虑这种可能,程序运行就会报错,我们不希望这种程序出错出现。在我们写程序的时候,尽量考虑可能发生的所有情况,提高代码的健壮性。在本示例中,存在几种可能导致没有查找到该员工信息,一是该员工信息没有提前录入到人员信息工作表,二是操作界面输入的员工姓名写错了。这种情况下,应该给使用该系统的人员提示,而不是程序错误无法使用。




