【问题标题】:How to limit a drop down list in a combo box to only show the values that include the letters that the user typed?如何限制组合框中的下拉列表仅显示包含用户键入的字母的值?
【发布时间】:2020-01-13 11:06:22
【问题描述】:

我正在使用 Access 2010 数据库。我有一个组合框,它为我提供了设备编号的完整列表(它们有字母和数字,即:sdp1234)。

为了加快数据库速度,有人告诉我限制组合框中的下拉列表。

目前,用户可以开始输入设备#,列表中的项目将根据输入的字符突出显示。

我希望用户能够输入“12”并且列表显示应该只有“sdp1200”和“sdp1299”之间的值。甚至只是里面有“12”的所有项目。

我不确定这是在 VBA 中还是在组合框的属性选项卡中完成的。

【问题讨论】:

  • 请使用tour 并阅读How to Ask,然后自己努力改进您的问题(编辑)。例如阅读相关部分(在页面的正确位置)。 .另一个提示:您的任务称为“键入时搜索”。在网络上查询(具有领先的 ms 访问权限),

标签: vba list ms-access combobox ms-access-2010


【解决方案1】:

一个解决方案是:
把它放在你的 VBA 的顶部 .. 就在 Option ... 下

Dim comboboxOriginal As String  

将此代码放入更改事件中

Private Sub cboFilterAsType_Change()
If Len(Nz(comboboxOriginal, "")) = 0 Then 
    comboboxOriginal = Me.cboFilterAsType.RowSource
End If
If Len(Me.cboFilterAsType.Text) > 1 Then
    Me.cboFilterAsType.SelStart = Len(Me.cboFilterAsType.Text)
    Me.cboFilterAsType.RowSource = Replace(comboboxOriginal, ";", "") & " WHERE SOMEFIELD like ""*" & Me.cboFilterAsType.Text & "*"""
    DoCmd.RunCommand acCmdSaveRecord
    Me.cboFilterAsType.Requery
    Me.cboFilterAsType.Dropdown
End If
End Sub

清除过滤

Private Sub cboFilterAsType_DblClick(Cancel As Integer)
If Len(Nz(comboboxOriginal, "")) > 0 Then 
    Me.cboFilterAsType.RowSource = comboboxOriginal
End If
End Sub

请注意,RowSource 应该是一些简单的东西,例如 SELECT SomeID From ATable

【讨论】:

  • Len 模式 +1!此外,您应该添加Option Explicit。而不是""我更喜欢vbNullString.因为它是错字安全的。代码应该缩进,单行Ifstaements 很难阅读,syntax-highlighting 更容易使用code-fences
猜你喜欢
  • 1970-01-01
  • 2015-07-07
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 2013-08-23
  • 2012-12-05
相关资源
最近更新 更多