【发布时间】:2019-10-25 12:02:30
【问题描述】:
我有一个数据列表(20,000 多种产品),根据产品的状况有不同的定价,用户需要能够快速查找某些等级的产品定价,我目前的挑战是使用 vlookup 经常失败用户将只是关键字搜索而没有确切的描述。我想使用 vlookup 保留现有查找,因为当用户拥有确切的产品标题但想要在他们只有关键字时添加高级搜索时,这将保持快速搜索(我已经尝试过数据验证可搜索列表,但它们是缓慢且不可靠)
我创建了一个列表框,但无法获取代码来搜索我的数据集并显示结果,
这是我正在使用的代码(库存数据包含我所有的产品和定价),我的第二张表称为搜索,我希望用户在其中找到他们正在寻找的东西
enter code here
Private Sub cmdsearch_click()
Dim Rownum As Long
Dim Searchrow As Long
Rownum = 2
Searchrow = 2
Worksheets("Stock Data").Activate
Do Until Cells(Rownum, 1).Value = ""
If InStr(1, Cells(Rownum, 1).Value, txtkeywords.Value, vbTextCompare) > 0 Then
Worksheets("Sheet1").Cells(Searchrow, 1).Value = Cells(rownnum, 1).Value
Worksheets("Sheet1").Cells(Searchrow, 2).Value = Cells(rownnum, 2).Value
Worksheets("Sheet1").Cells(Searchrow, 3).Value = Cells(rownnum, 3).Value
Searchrow = Searchrow + 1
End If
Rownum = Rownum + 1
Loop
If Searchrow = 2 Then
MsgBox "Sorry No products found, please request a price"
End If
Lstsearchresults.RowSource = "SearchResults"
End Sub
【问题讨论】:
-
谢谢,但链接是德语的,我对 VBA 有点生疏
-
带有通配符的
VLOOKUP怎么样? -
哦,关于
Range.Find,微软确实有多种语言的在线文档。 -
@ronrosenfeld 我很难理解如何将 Range.find 包装到我的代码中,这就是我查看搜索的原因
-
另一种可能性是read in your list to a memory based array 以获得性能。它可以加速细胞循环,花费几秒钟到几乎瞬间。
标签: excel database vba search listbox