64、基于range.find的VBA模糊查询系统设计(VBA进阶)

64、基于range.find的VBA模糊查询系统设计(VBA进阶)

编码文章call10242025-09-12 16:23:341A+A-


1、查找窗体设计的必学语句-range.find,前面我们学习搭建《人事信息查询系统》,通过comboBox控件选取人员编号进行完整信息查找。这种方式对只有十几个人的小团队适合,你可能会说大公司,几百上千甚至好几千人的集团公司,一般会购买管理系统。

如果您只是管理几十人的车间或者线、拉长,公司不会给你配备相关资源。您想过搭建一个查询系统来管理你的团队、管理仓库物资吗?

本节讲的比54节讲的通过comboBox下拉菜单选择更加强大!!


2、通过输入姓名中的某个字符进行模糊匹配(如下图所示)


3、窗体设计、美化部分(请参考前面介绍)

4、代码(姓名栏的comboBox 事件)

Private Sub 姓名_Change()

‘姓名:combobox的名称

On Error Resume Next

Dim i%, k, n%

Dim findvalue As Range

Dim arr(1 To 9)’这里设置了数组限定,实际应用中要看实际情况而定

n = 1

Set findvalue = Sheets("查询窗体range.find()模糊查询").Range("a:a").Find(姓名.text)

‘把这个工作表中A列的数据都写入变量

If findvalue Is Nothing Then

‘查找是否有改信息,range.find只查找第一个,但满足本案例需求。判断有无

MsgBox "查无此值"

Exit Sub

‘查无时退出程序

Else

k = findvalue.Address

‘记录第一个匹配到的单元格地址

arr(n) = findvalue

‘并写入数组

n = n + 1

End If

Do

Set findvalue = Sheets("查询窗体range.find()模糊查询").Range("a:a").FindNext(After:=findvalue)

If findvalue.Address = k Then

‘继续查找,如果在找到的单元格地址等于第一个找到的单元格一致,说明已经全部找完,所以结束。

Exit Do

Else

arr(n) = findvalue

‘写入数组

n = n + 1

End If

Loop


姓名.List = arr

'Erase arr


'------------下面这一步是给comboBox第二次事件匹配数据------------------------

Dim rng As Range

For Each rng In Sheets("查询窗体range.find()模糊查询").Range("a1:a9")

If rng = 姓名.text Then

编号.text = rng.Offset(0, 1)

学历.text = rng.Offset(0, 3)

职务.text = rng.Offset(0, 4)

身份证号.text = rng.Offset(0, 5)

照片.Picture = LoadPicture(ThisWorkbook.Path & "\员工照片\" & 姓名.text & ".jpg")

End If

Next

'-------这个例子在同一个控件中设置了两个事件,对用户操作更友好
----------------------------------------

End Sub



你学会了吗?不论你是求知若渴的在校学生,还是在职场摸爬滚打多年的上班族,只要怀揣着提升自我的决心,别犹豫,快点赞、关注、收藏!我会始终站在零基础小白的视角,循序渐进,带你一步步踏入VBA的奇妙世界。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4