64、基于range.find的VBA模糊查询系统设计(VBA进阶)
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的奇妙世界。