我正在尝试创建一个搜索栏,在用户键入时自动完成用户在文本框中键入的单词。我的自动补全基于列中写入的数据。
问题是:该列的每个单元格包含许多单词(它们是关键字,每个单词用逗号分隔)。我的代码会自动完成整个单元格中出现的单词,而不仅仅是键入的单词。
另一个问题是:每个单元格包含不同的单词组合,但许多单词在不同的单元格中重复。
我不知道如何才能实现仅自动完成一个单词而不是整个单元格,这是我的主要困难。
我尝试过滤该单词并检测在不同单元格中重复的单词,但它不起作用,因为每个单词都位于不同的单词组合中。 Excel 再次检测整个组合,而不仅仅是一个单词。
这是我编写的代码示例 - 它很实用,但它会自动完成整个单元格而不是仅一个单词
'Date
Private Sub TextBoxDT_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim lastRow As Long
Dim searchRange As Range
Dim searchString As String
Dim foundCell As Range
Set searchRange = ThisWorkbook.Worksheets("Base de données").ListObjects("RCA").ListColumns("Date constatation NC").DataBodyRange
searchString = TextBoxDT.Text
If searchString = "" Then Exit Sub
lastRow = searchRange.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set foundCell = searchRange.Find(What:=searchString, LookIn:=xlValues, LookAt:=xlWhole)
If Not foundCell Is Nothing Then
TextBoxDT.Text = foundCell.Value
TextBoxDT.SelStart = Len(searchString)
TextBoxDT.SelLength = Len(foundCell.Value) - Len(searchString)
Else
Set foundCell = searchRange.Find(What:=searchString & "*", LookIn:=xlValues, LookAt:=xlWhole)
If Not foundCell Is Nothing Then
TextBoxDT.Text = foundCell.Value
TextBoxDT.SelStart = Len(searchString)
TextBoxDT.SelLength = Len(foundCell.Value) - Len(searchString)
End If
End If
End Sub
如果您的单元格包含多个单词(以某种形式的分隔符分隔),您可以使用函数
Split()
。此函数将返回一个包含所有子字符串的数组,这些子字符串是在您指定的分隔符位置分割原始字符串的结果。
有关更多信息,请参阅文档 (https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/split-function)。
使用该功能,您应该能够实际获取单元格中包含的单词,而不仅仅是整个单元格。