VBA窗体中listview使用逐字查询显示内容

2016年12月15日19:20:23 评论 7,677 views
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页

Excel交流群165159540。

今天分享一个逐字查询,结果显示到ListView中的例子,代码来自罗刚君的《Excel 2010 VBA编程与实践》。要实现的效果是通过窗体查询,要求在文本框中输入时可以实现逐字的查询,即每输入一个字都会显示相应的查询结果,用到的是窗体的keyup事件。直接看代码

Private Sub UserForm_Initialize() '控件初始化
With ListView1
.ColumnHeaders.Add , , "公司", .Width / 2 '添第1列表头,宽度为listview1宽度1半
.ColumnHeaders.Add , , "金额", .Width / 2 '添第2列表头
.View = lvwReport '报表形式显示
.Gridlines = True '显示网格线
End With
TextBox1.SetFocus '文本框显得焦点
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim firstAddress As String, rng As Range, item
ListView1.ListItems.Clear '清除listview所有值
If TextBox1.Text = "" Then GoTo line '如果文本框是空则执行line后面的语句
With Range("a:a") '对A列进行模糊查找
Set rng = .Find(TextBox1.Text, LookIn:=xlValues, lookat:=xlPart)
If Not rng Is Nothing Then '如果找到目标
firstAddress = rng.Address '记录第一个找到单元格的地址
Do
Set item = ListView1.ListItems.Add() '对ListView添加新行
item.Text = rng.Text '第一列显示找到的单元格
item.SubItems(1) = rng.Offset(0, 1).Text
Set rng = .FindNext(rng) '查找下一个
Loop While rng.Address <> firstAddress
End If
End With
line: '指定一个标签,让程序在指定条件下可以跳转到此处继续执行
'让ListView1控件的高度随查到的值的多少而变化,让窗体更美观
'ListView1.Height = ListView1.Font.Size * ListView1.ListItems.Count + 40
'Me.Height = ListView1.Height + 100 '让窗体随ListView1的高度自动变化
End Sub

模糊查询用的是Find方法,给的解释也比较详细,不再多讲。

  • 郑广学老师微信号
  • EXCEL880B
  • weinxin
  • 我的微信公众号
  • EXCEL880
  • weinxin