4.5.4-代码解析:L111_Fun_人员信息

该函数的功能是从人员信息工作表中寻找当前人员的信息,人员信息表结构如图4-18所示。可知人员信息表,每名员工有一行信息,只需要找到该员工所处的行号就可以获取员工信息,将这些信息写入新生成的员工档案表即可,效果如图4-19所示。核心代码逻辑如下:

  • 1)根据姓名,寻找该名员工信息所在行号

  • 2)根据行号,获取该员工的籍贯、毕业院校、专业、手机号、通讯地址、学历信息

  • 3)将以上信息按照固定位置写入生成员工个人档案表中


../_images/4-18.png

图4-18 人员信息表

../_images/4-19.png

图4-19 人员档案中的人员信息


代码如下

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即可。


../_images/4-20.png

图4-20 省略Application报错

../_images/4-21.png

图4-21 match函数在Excel公式中的应用


2)第7行IsError(pos),判断pos是否是错误信息。图4-22示例中,采用match函数未找到需要的信息时,返回一个错误信息Error 2042。用IsError来识别这个错误,如果没有考虑这种可能,程序运行就会报错,我们不希望这种程序出错出现。在我们写程序的时候,尽量考虑可能发生的所有情况,提高代码的健壮性。在本示例中,存在几种可能导致没有查找到该员工信息,一是该员工信息没有提前录入到人员信息工作表,二是操作界面输入的员工姓名写错了。这种情况下,应该给使用该系统的人员提示,而不是程序错误无法使用。


../_images/4-22.png

图4-22 macth未找到匹配信息