在具有多个单词的术语的任何位置搜索单词
Search for word in any position of a term with multiple words
在我的 VBA 用户窗体上,我有一个文本框 (Txt1
)。我将它用作我的 ListBox (Lst1
) 的搜索栏。
当我向 Txt1
写入任何表达式时,我可以在 Lst1
中找到我要查找的内容。这两个(Txt1
和Lst1
)被集成到我的股票程序中。
要查找股票名称,我需要将准确的股票名称写入Txt1
。
例如;
如果我要找"Siemens Overcurrent Relay"
我需要写 "Siemens" 然后 "Overcurrent" 然后 "Relay"
我想在写"Relay"到Txt1
时看到包含"Relay"的所有股票名称的列表,无论是在股票的中间还是在股票的末尾名字.
使用下面的代码,我只看到 Lst1
中第一个单词的列表。
就我而言,这意味着我可以列出 "Siemens"
如何让列表显示包含搜索词的每个股票名称?
Private Sub ListBox1_Click()
Dim i As Long, lastrow As Long
lastrow = Sheets("TümListe").Range("D" & Rows.Count).End(xlUp).Row
For i = 2 To lastrow
If CStr(Sheets("TümListe").Cells(i, "D").Value) = (Me.ListBox1.Value) Then
Me.TextBox2 = Sheets("TümListe").Cells(i, "E").Value
Me.TextBox3 = Sheets("TümListe").Cells(i, "F").Value
Me.TextBox4 = Sheets("TümListe").Cells(i, "B").Value
Me.TextBox5 = Sheets("TümListe").Cells(i, "C").Value
End If
Next
End Sub
Private Sub TextBox1_Change()
Dim i As Long
Me.TextBox1.Text = StrConv(Me.TextBox1.Text, 1)
Me.ListBox1.Clear
For i = 2 To Application.WorksheetFunction.CountA(Sayfa281.Range("D:D"))
a = Len(Me.TextBox1.Text)
If Left(Sayfa281.Cells(i, 4).Value, a) = Left(Me.TextBox1.Text, a) Then
Me.ListBox1.AddItem Sayfa281.Cells(i, 4).Value
Me.ListBox1.List(ListBox1.ListCount - 1, 4) = Sayfa2.Cells(i, 6).Value
End If
Next i
End Sub
而不是这一行
If Left(Sayfa281.Cells(i, 4).Value, a) = Left(Me.TextBox1.Text, a) Then
使用 Instr 函数,它会向上搜索单词。像这样:
If InStr(Sayfa281.Cells(i, 4).Value, Me.TextBox1.Text) >= 1 Then
感谢 SeanC 提供 Instr 功能
VBA equivalent to Excel's "Search()"
而不是这一行
If Left(Sayfa281.Cells(i, 4).Value, a) = Left(Me.TextBox1.Text, a) Then
我使用下面的代码:
If Sayfa281.Cells(i, 4).Value Like "*" & TextBox1.Text & "*" Then
顺便说一下,您的代码也能正常工作。
在我的 VBA 用户窗体上,我有一个文本框 (Txt1
)。我将它用作我的 ListBox (Lst1
) 的搜索栏。
当我向 Txt1
写入任何表达式时,我可以在 Lst1
中找到我要查找的内容。这两个(Txt1
和Lst1
)被集成到我的股票程序中。
要查找股票名称,我需要将准确的股票名称写入Txt1
。
例如;
如果我要找"Siemens Overcurrent Relay"
我需要写 "Siemens" 然后 "Overcurrent" 然后 "Relay"
我想在写"Relay"到Txt1
时看到包含"Relay"的所有股票名称的列表,无论是在股票的中间还是在股票的末尾名字.
使用下面的代码,我只看到 Lst1
中第一个单词的列表。
就我而言,这意味着我可以列出 "Siemens"
如何让列表显示包含搜索词的每个股票名称?
Private Sub ListBox1_Click()
Dim i As Long, lastrow As Long
lastrow = Sheets("TümListe").Range("D" & Rows.Count).End(xlUp).Row
For i = 2 To lastrow
If CStr(Sheets("TümListe").Cells(i, "D").Value) = (Me.ListBox1.Value) Then
Me.TextBox2 = Sheets("TümListe").Cells(i, "E").Value
Me.TextBox3 = Sheets("TümListe").Cells(i, "F").Value
Me.TextBox4 = Sheets("TümListe").Cells(i, "B").Value
Me.TextBox5 = Sheets("TümListe").Cells(i, "C").Value
End If
Next
End Sub
Private Sub TextBox1_Change()
Dim i As Long
Me.TextBox1.Text = StrConv(Me.TextBox1.Text, 1)
Me.ListBox1.Clear
For i = 2 To Application.WorksheetFunction.CountA(Sayfa281.Range("D:D"))
a = Len(Me.TextBox1.Text)
If Left(Sayfa281.Cells(i, 4).Value, a) = Left(Me.TextBox1.Text, a) Then
Me.ListBox1.AddItem Sayfa281.Cells(i, 4).Value
Me.ListBox1.List(ListBox1.ListCount - 1, 4) = Sayfa2.Cells(i, 6).Value
End If
Next i
End Sub
而不是这一行
If Left(Sayfa281.Cells(i, 4).Value, a) = Left(Me.TextBox1.Text, a) Then
使用 Instr 函数,它会向上搜索单词。像这样:
If InStr(Sayfa281.Cells(i, 4).Value, Me.TextBox1.Text) >= 1 Then
感谢 SeanC 提供 Instr 功能 VBA equivalent to Excel's "Search()"
而不是这一行
If Left(Sayfa281.Cells(i, 4).Value, a) = Left(Me.TextBox1.Text, a) Then
我使用下面的代码:
If Sayfa281.Cells(i, 4).Value Like "*" & TextBox1.Text & "*" Then
顺便说一下,您的代码也能正常工作。