我在excel标签中为工具库存创建了一个模板" ESOS"和另一个用于搜索功能选项卡sheet2的选项卡。 搜索工作正常,但如果我没有输入整个单词或工具名称的确切单词,我将无法工作。 示例:要查找钻头,我必须输入正确的单词"钻头"。我想知道是否有一种方法可以让VBA搜索功能搜索整个列表,即使我只输入了Dri或者。 这是代码。
Option Compare Text
Sub searchable()
Dim erow As Long
Dim ws As Worksheet
Dim lastrow As Long
Dim count As Integer
lastrow = Sheets("ESOS").Cells(Rows.count, 1).End(xlUp).Row
Sheet2.Range("a11:F6000").ClearContents
count = 0
Dim p As Long
p = 11
For x = 2 To lastrow
If Sheets("ESOS").Cells(x, 1) = Sheet2.Range("B3") Then
Sheet2.Cells(p, 1) = Sheets("ESOS").Cells(x, 1)
Sheet2.Cells(p, 2) = Sheets("ESOS").Cells(x, 2)
Sheet2.Cells(p, 3) = Sheets("ESOS").Cells(x, 3)
Sheet2.Cells(p, 4) = Sheets("ESOS").Cells(x, 4)
Sheet2.Cells(p, 5) = Sheets("ESOS").Cells(x, 5)
Sheet2.Cells(p, 6) = Sheets("ESOS").Cells(x, 6)
p = p + 1
count = count + 1
End If
Next x
MsgBox " The number of data found for this item code is " & "" & count
End Sub
答案 0 :(得分:2)
要获得部分匹配,请更改:
If Sheets("ESOS").Cells(x, 1) = Sheet2.Range("B3") Then
要:
If InStr(Sheets("ESOS").Cells(x, 1), Sheet2.Range("B3")) > 0 Then
您还可以考虑使搜索不区分大小写:
If InStr(LCase(Sheets("ESOS").Cells(x, 1)), LCase(Sheet2.Range("B3"))) > 0 Then
另外,将Integer
声明为一般的错误做法,尤其是如果此变量存储行号,则应该避免这种做法。如果行超过32 767,您的宏将崩溃,尽管在这种情况下它是结果行的数量,这应该永远不会这么多。请改用Long
。