微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 VBA 的 MS Access 快速组合框

如何解决带有 VBA 的 MS Access 快速组合框

我有一个表单,上面有一个 ComboBox,它通过 ID 提取记录并显示链接表中的名称。在生成的表单组合框向导中标准查找值。它工作得很好,但每次找到一条记录需要 3-4 分钟。

我一直在尝试对此进行研究,并发现一些看起来很有用的东西,但似乎无法正确使用。

我现在的代码

 Private Sub Combo81_Change()
 Dim strText As String
 Dim strSelect As String
 strText = Nz(Me.Combo81.Text,"")
 If Len(strText) > 2 Then
 strSelect = "SELECT Name FROM CTable WHERE Name LIKE '*" & strText & "*'; "
 Debug.Print strSelect
 Me.Combo81.RowSource = strSelect
 Me.Combo81.Dropdown
 End If
 End Sub

我在两个论坛上找到了这段代码,这应该做以下事情:“关键是没有为组合框定义行源。当用户开始输入字母时,行源将被定义。一旦他们得到 3 个字母,然后组合框的行源将被定义,组合框将被告知下拉。”

当我输入 3 个字母时,会出现一个下拉列表,但它是空白的,不显示任何结果。

我希望用户输入时,例如“史密斯”只有那些叫史密斯的人才会出现。

我对 Access 和数据库比较陌生,我使用 FE/BE 和链接表到共享网络文件夹和用户桌面上的 FE。

有什么建议吗?或者关于如何更快地使用我的组合框并保持值的唯一性的不同解决方案?

combobox properties

解决方法

您可以使用以下代码在 ms access 的组合框中搜索值作为用户类型, 假设我们的表单中有一个组合框名称 org_id,为了在 org_id 中搜索一个值,我们需要 org_id 组合框上的三个事件。 AfterUpdate、LostFocus 和 KeyPress 事件。 代码是:

Dim strFilter As String ' Module scope variable used for filter on our combo (org_id)

Private Sub org_id_AfterUpdate()
    strFilter = ""
    strSQL = "SELECT org_tbl.org_id,org_tbl.org_name,org_tbl.org_code FROM org_tbl" & _
             " ORDER BY org_tbl.org_code"
    org_id.RowSource = strSQL
    
End Sub

Private Sub org_id_LostFocus()
    strFilter = ""
    strSQL = "SELECT org_tbl.org_id,org_tbl.org_code FROM org_tbl" & _
             " ORDER BY org_tbl.org_code"
    org_id.RowSource = strSQL
End Sub

Private Sub org_id_KeyPress(KeyAscii As Integer)
    strSQL = "SELECT org_tbl.org_id,org_tbl.org_code FROM org_tbl ORDER BY org_tbl.org_code"
    
    If KeyAscii <> 8 Then ' pressed key is not backspace key
        strFilter = strFilter & Chr(KeyAscii)
    End If
    
    If IsNull(strFilter) = True Or strFilter <> "" Then
        If KeyAscii = 8 Then ' pressed key is backspace key
            strFilter = Left(strFilter,(Len(strFilter) - 1))
        End If
    End If
    
    strSQL = "SELECT org_tbl.org_id,org_tbl.org_code FROM org_tbl" & _
             " WHERE org_name Like '*" & strFilter & "*' ORDER BY org_tbl.org_code"
    org_id.RowSource = strSQL
    org_id.Dropdown
End Sub

我希望这个(答案)对你有帮助。

编辑: 您可以从以下链接下载示例文件: Access combo box to search as you type sample file

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。