员工管理 根据编号查询
1 功能描述
功能描述
输入员工编号,然后点击按钮[根据编号查询员工],会从数据存储工作表中获取数据,显示员工的其他属性信息:姓名、性别、部门、出生日期、入职日期。
查询结果如下图所示。
先介绍第1种实现方法1:通过Range.Find方法直接查找
2 主要步骤
步骤1:获取数据表最后一行的行号,并进行校验
步骤2:存储工作表中,根据ID获取数据区域
步骤3:复制查询结果数据,从存储工作表到管理工作表
3 完整代码
Sub load1()
'声明变量
Dim rowIndexLast As Integer '数据表的最后一行的行数
Dim id As String '要查询的ID
Dim idCell As Range 'ID所在单元格
Dim idRange As Range 'ID的数据区域
'步骤1:获取数据表最后一行的行号,并进行校验
rowIndexLast = Worksheets("A01员工").Range("A1").CurrentRegion.Rows.Count
If rowIndexLast = 1 Then
MsgBox "当前表中没有数据", Title:="小步教程 www.xiaobuteach.com"
Exit Sub
End If
'步骤2:存储工作表中,根据ID获取数据区域
'获取要查找的ID
id = Worksheets("B01员工管理").Range("B6").Value
'通过Find查找数据所在单元格
Set idCell = Worksheets("A01员工").Range("A2:A" & rowIndexLast).Find(id, lookat:=xlWhole)
'没有找到则停止执行
If idCell Is Nothing Then
MsgBox "没有找到数据,查询失败。ID:" & id
Exit Sub
End If
'打印单元格的行数
Debug.Print (idCell.Row)
'获取数据区域
Set idRange = idCell.Resize(1, 6)
'步骤3:复制查询结果数据,从存储工作表到管理工作表
Worksheets("B01员工管理").Range("B6:G6").Value = idRange.Value
MsgBox "查询成功。", Title:="小步教程www.xiaobuteach.com"
End Sub
4 代码讲解
CurrentRegion.Rows.Count用于获取下方表格的总行数,因为存储工作表的区域是从第1行开始,所以总行数也就是最后一行的行数(下标)。
If rowIndexLast = 1 Then 如果总行数为1,说明没有数据,则相应提示,然后停止执行。
Find用于返回值对应的单元格,参数lookat:=xlWhole表示完全匹配。如果没有找到,则返回Nothing。判断是否Nothing不能使用等于=,需要通过Is Nothing。
Resize用于将一个单元格的区域,返回一个1行6列的区域。
Worksheets("B01员工管理").Range("B6:G6").Value = idRange.Value 等号后的连续区域的值赋值给等号前的连续区域,避免单个单元格一个个赋值。
5 测试用例
正常用例:当数据存储表[A01员工]存在要查询的ID时,[B01员工管理]正常显示结果。
异常用例1:当数据存储表[A01员工]为空时,提示“当前表中没有数据”。
异常用例2:当数据存储表[A01员工]存在数据,但查询的ID不存在时,提示“没有找到数据,查询失败。ID:* * * * * * *”