员工管理 根据编号查询

1 功能描述

img功能描述

输入员工编号,然后点击按钮[根据编号查询员工],会从数据存储工作表中获取数据,显示员工的其他属性信息:姓名、性别、部门、出生日期、入职日期。

查询结果如下图所示。

img

先介绍第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列的区域。

img

Worksheets("B01员工管理").Range("B6:G6").Value = idRange.Value 等号后的连续区域的值赋值给等号前的连续区域,避免单个单元格一个个赋值。


5 测试用例

正常用例:当数据存储表[A01员工]存在要查询的ID时,[B01员工管理]正常显示结果。

异常用例1:当数据存储表[A01员工]为空时,提示“当前表中没有数据”。

异常用例2:当数据存储表[A01员工]存在数据,但查询的ID不存在时,提示“没有找到数据,查询失败。ID:* * * * * * *”