我有一个TextBox和ListBox。我想在包含用TextBox编写的特定多个单词(关键字)的范围内找到一个字符串,并将其显示在ListBox中
例如:
我有一个字符串a =“太阳正在闪耀” 我想研究范围,找到并显示包含这些特定单词的单元格值,当我在TextBox中编写例如“sun shinning”时。 看一下我的最后一个字符串,我用小写字写“sun”字样。
我写了代码
Sub AAA()
Dim ws As Worksheet
Set ws = Worksheets("BBB")
Dim LastRow As Long
Dim i As Long
ZZZ.Clear
LastRow = ws.Range("D" & Rows.Count).End(xlUp).Row
With ZZZ
.ColumnCount = 3
.ColumnWidths = "100;400"
For i = 2 To LastRow
' For x = 0 To UBound(z)
If ws.Range("E" & i) Like AAA
.Value & "*" Then
.AddItem ws.Range("D" & i)
.column(1, ZZZ.ListCount - 1) = ws.Range("E" & i)
'.column(2, ZZZ.ListCount - 1) = ws.Range("E" & I)
End If
' Next x
Next i
End With
End Sub
但每次当我尝试添加第二个循环负责拆分句子并按每个单词循环时,我会收到一条错误消息。
您是否知道如何简单地修改我的代码来做到这一点?
答案 0 :(得分:1)
假设输入文本框AAA的多个单词始终带有空格,则此过程有效(经过测试和测试)。
该过程使用Split
函数将AAA文本框中的单词加载到数组中,然后为每个单元格循环数组。
Sub AAA()
Dim ws As Worksheet
Set ws = Worksheets("BBB")
Dim LastRow As Long
Dim i As Long
ZZZ.Clear
LastRow = ws.Range("D" & Rows.Count).End(xlUp).Row
With ZZZ
.ColumnCount = 3
.ColumnWidths = "100;400"
For i = 2 To LastRow
Dim sWords() As String, x As Integer
sWords = Split(AAA.Value, " ")
For x = 0 To UBound(sWords)
If ws.Range("E" & i) Like "*" & sWords(x) & "*" Then
.AddItem ws.Range("D" & i)
.Column(1, Sheet1.ZZZ.ListCount - 1) = ws.Range("E" & i)
End If
Next x
Next i
End With
End Sub
当我输入这个时,我认为将数组循环一次并找到整个范围内每个单词的任何匹配可能更快,但我会把它留给你。