员工管理 根据编号查询
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:="关关教程 tuto.dushare.cn"
    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:="关关教程tuto.dushare.cn"
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:* * * * * * *”