如何创建建议结果的动态搜索栏

问题描述 投票:0回答:1

我正在尝试创建一个搜索栏,在用户键入时自动完成用户在文本框中键入的单词。我的自动补全基于列中写入的数据。

问题是:该列的每个单元格包含许多单词(它们是关键字,每个单词用逗号分隔)。我的代码会自动完成整个单元格中出现的单词,而不仅仅是键入的单词。

另一个问题是:每个单元格包含不同的单词组合,但许多单词在不同的单元格中重复。

我不知道如何才能实现仅自动完成一个单词而不是整个单元格,这是我的主要困难。

我尝试过滤该单词并检测在不同单元格中重复的单词,但它不起作用,因为每个单词都位于不同的单词组合中。 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
excel vba filter autocomplete
1个回答
0
投票

如果您的单元格包含多个单词(以某种形式的分隔符分隔),您可以使用函数

Split()
。此函数将返回一个包含所有子字符串的数组,这些子字符串是在您指定的分隔符位置分割原始字符串的结果。

有关更多信息,请参阅文档 (https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/split-function)。

使用该功能,您应该能够实际获取单元格中包含的单词,而不仅仅是整个单元格。

© www.soinside.com 2019 - 2024. All rights reserved.