vba 怎么实现在excel中搜索窗体textbox中的内容
参考如下问答:
如何让textbox中输入信息,在表格中搜索到,并实时显示在listbox中
功能描述如下,如附件中frame图所示,在textbox中输入一个人名,实时在一个表格(如附件表格图所示)中搜索此人名,并将搜索结果放到frame中的listbox中,搜索结果包括姓名,班级,性别。实时显示就是在textbox中输入后马上执行搜索并显示的任务,应该是在textbox的change方法中写代码。
根据textbox1里的值去查找,应该可以不用考虑使用字典的
Private Sub TextBox1_Change()
ListBox1.Clear
Set Rng = Sheets(1).Columns(2).Find(TextBox1.Text, lookat:=xlWhole)
If Not Rng Is Nothing Then
ListBox1.AddItem (Rng)
For j = Rng.Row + 1 To Sheets(1).Cells(Rows.Count, 2).End(3).Row
If Sheets(1).Cells(j, 2) = Rng Then
ListBox1.AddItem (Rng)
End If
Next j
End If
End Sub
根据textbox1的值查找
搜索内容很简单,你是想以什么样的形式返回?
搜索的话遍历行就可以,参考下面的代码
listbox1.Clear
listbox1.AddItem("库位 在库数量")
For j = 1 To 500 Step 1
If Trim(thisWs.Cells(i, 1)) = Trim(textbox1) and instr(1,thisWs.Cells(i, 2),textbox2) >0 Then
'thisWs.Cells(i, 2).Interior.ColorIndex = 3 '单元格颜色改成红色
listbox1.AddItem(thisWs.Cells(i, 3)&" "&thisWs.Cells(i, 4))'将符合条件的数据加入列表
'Exit For 允许多条结果时不要这个
End If
Next j
这段代码比较了第一列和textbox1相等,且第二列包含textbox2,变量名自己根据实际情况修改,遍历的行数也可以自己调整。
谢谢大神,送花~
我想以listbox形式返回,listbox1中第一行固定格式为“库位”,“在库数量”,比如我搜“钻头”,“1.6”,在listbox1中第二行(第一行库位的下面)可以出现:AA1,“在库数量”下面出现24;
这个样子,如果在excel中搜索1.6不止1个数据,那么 在listbox的第3行,第4行......都以第二行的数据格式返回出来;
代码又改了一下,listbox里增加数据就可以了。
Private Sub CommandButton1_Click()
Dim Rng As Range
With Application.Intersect(Sheet1.UsedRange, Sheet1.Range("A:A"))
Set Rng = .Find(What:=Me.TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)
If Not Rng Is Nothing Then
firstAddress = Rng.Address
Do
If InStr(1, Rng.Offset(0, 1).Value, Me.TextBox2.Value, vbBinaryCompare) > 0 Then
Sheet1.Activate
Rng.Select
Exit Sub
End If
Set Rng = .FindNext(Rng)
Loop While Not Rng Is Nothing And Rng.Address <> firstAddress
End If
End With
MsgBox "未找到"
End Sub
代码如下:
Private Sub CommandButton1_Click()
Dim MyRows As Integer
Dim MyFind As Boolean
With Excel.Application.ActiveWorkbook.Sheets("Sheet1")
MyFind = False
MyRows = 1
Do While .Cells(MyRows, 1).Value <> ""
If .Cells(MyRows, 1).Value = TextBox1.Text And .Cells(MyRows, 2).Value = TextBox2.Text Then
MsgBox "你要的数据在第" & MyRows & "行!"
MyFind = True
Exit Do
End If
MyRows = MyRows + 1
Loop
If Not MyFind Then MsgBox "找不到你要的数据!"
End With
End Sub
运行时界面:
单击按钮后显示: