VBA: 使用文本框填充 Word 用户表单上的列表框 - 查询 excel 数据库

VBA: Use Text Box to Populate List Box on Word User Form - Query excel data base

我想根据在同一表单的文本框中输入的数据填充 Word 用户表单上的列表框。理想情况下,这将实时发生(使用我认为的更改事件),在文本框中输入的每个字符都会过滤出现在列表框中的项目。

数据源是使用 DAO 访问的 Excel "data base"。下面的代码有效,但它将整个数据库输入列表框(基于此 - Link)。

    Private Sub UserForm_Initialize()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim NoOfRecords As Long

    'Open the database (Excel File)
    Set db = OpenDatabase("C:\Users\T400\Documents\UserFormListTest.xlsx" _
          , False, False, "Excel 8.0")

    'Retrieve the recordset > Excel Range = "ListBoxData"
    Set rs = db.OpenRecordset("SELECT * FROM ListBoxData")

    ' Determine the number of retrieved records
    With rs
         .MoveLast
            NoOfRecords = .RecordCount
         .MoveFirst
    End With

    ' Set the number of Columns = number of Fields in recordset
    ListBox1.ColumnCount = rs.Fields.Count
    ListBox1.Column = rs.GetRows(NoOfRecords)

        rs.Close
        db.Close

        Set rs = Nothing
        Set db = Nothing

    End Sub

如何过滤数据,以便列表框只根据文本框填充?我希望有一个简单的解决方案,比如修改代码的 SELECT * 查询部分。

这可能吗?或者有更好的方法吗?

正如我在问题评论中提到的,MS Excel 使用 Jet 数据库引擎。因此,您必须使用与该数据库引擎相对应的通配符。

因此,如果您想开发自定义 "search/find" 功能,您可以使用以下选项在表单上添加 Combobox 控件:AllStartsWithContainsEndsWith。示例代码应如下所示(将控件名称替换为您的名称):

Dim sName As String
Dim sSearchType As String
Dim sQry As String 

sName = TextBox1.Text
sSearchType = ComboBox1.Value

sQry = "SELECT * FROM ListBoxData "
Select Case sSearchType
    Case "All"
        'do nothing; return all records
    Case "StartsWith"
        sQry = sQry & "WHERE Name Like '" & sName & "*'"
    Case "Contains"
        sQry = sQry & "WHERE Name Like '*" & sName & "*'"
    Case "EndWith"
        sQry = sQry & "WHERE Name Like '*" & sName & "'"
End Select

Set rs = db.OpenRecordset(sQry)
'other stuff

有关通配符的更多信息,您可以在此处找到:
Access wildcard character reference
Office: Wildcard Characters used in String Comparisons