在使用Google搜索时,一般我们会在输入框中输入想要搜索的文本,此时下方会出现相关条目供选择,以方便快速输入。下面,我们在Excel用户窗体中使用文本框和列表框来仿造这样的效果。 Option Explicit Dim varData Private Sub txtFind_Change() Dim i As Long Dim strFind As String strFind = "*" & UCase(Me.txtFind.Text) & "*" With Me.lbxData .List = varData For i = .ListCount - 1 To 0 Step -1 If Not UCase(.List(i)) Like strFind Then .RemoveItem i End If Next i End With End Sub Private Sub UserForm_Initialize() Dim lLast As Long Dim rng As Range lLast = Sheet1.Range("A" & Cells.Rows.Count).End(xlUp).Row varData = Sheet1.Range("A1:A" & lLast) Me.lbxData.List = varData End Sub 我们可以将UserForm_Initialize代码块中的代码Me.lbxData.List = varData删除,这样当在文本框txtFind中输入时,只要输入的数据符合列表框包含的数据,列表框中将自动出现相关条目并随着输入的进一步具体条目相应减少至完全匹配输入的数据,如图3、4、5所示。 Option Explicit Private Sub txtFind_Change() Dim varData As Variant varData = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value varData = Application.Transpose(varData) varData = Filter(SourceArray:=varData, _ Match:=txtFind.Value, _ Include:=True, _ Compare:=vbTextCompare) Me.lbxData.List = varData End Sub Private Sub UserForm_Initialize() Me.lbxData.List = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value End Sub 如果需要将列表框中所选择的条目放到文本框中,那么添加下面的代码: Private Sub lbxData_Click() Me.txtFind.Value = Me.lbxData.Value End Sub 示例文档下载: Option Explicit Dim varData Private Sub txtFind_Change() Dim i As Long Dim strFind As String strFind = "*" & UCase(Me.txtFind.Text) & "*" With Me.lbxData .List = varData For i = .ListCount - 1 To 0 Step -1 If Not UCase(.List(i)) Like strFind Then .RemoveItem i End If Next i End With End Sub Private Sub UserForm_Initialize() Dim lLast As Long Dim rng As Range lLast = Sheet1.Range("A" & Cells.Rows.Count).End(xlUp).Row varData = Sheet1.Range("A1:A" & lLast) Me.lbxData.List = varData End Sub 我们可以将UserForm_Initialize代码块中的代码Me.lbxData.List = varData删除,这样当在文本框txtFind中输入时,只要输入的数据符合列表框包含的数据,列表框中将自动出现相关条目并随着输入的进一步具体条目相应减少至完全匹配输入的数据,如图3、4、5所示。 Option Explicit Private Sub txtFind_Change() Dim varData As Variant varData = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value varData = Application.Transpose(varData) varData = Filter(SourceArray:=varData, _ Match:=txtFind.Value, _ Include:=True, _ Compare:=vbTextCompare) Me.lbxData.List = varData End Sub Private Sub UserForm_Initialize() Me.lbxData.List = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value End Sub 如果需要将列表框中所选择的条目放到文本框中,那么添加下面的代码: Private Sub lbxData_Click() Me.txtFind.Value = Me.lbxData.Value End Sub 示例文档下载:
|





