Access VBA:根据非绑定列在组合框中查找项目

Posted

技术标签:

【中文标题】Access VBA:根据非绑定列在组合框中查找项目【英文标题】:Access VBA: Find item in combo box based on non-bound column 【发布时间】:2013-03-12 16:28:58 【问题描述】:

我在 Access 表单上有一个两列组合框,表示键到代码的映射。组合框的第一列是“绑定列”(即调用MyComboBox.Value 时使用的列)。

我需要根据第二列中的值动态设置组合框的Value。例如,如果我的组合框来源是:

Value | Code
===============
 A1    | ABCD
 A2    | EFGH
 A3    | IJKL

我可以简单地使用ComboBox.Value = "A2" 设置组合框的值,但是如何使用第二列来设置组合框的值? ComboBox.Value = "EFGH" 显然无效。本质上是在寻找 ComboBox.Value = ComboBox.ValueWhereSecondColumnEquals("EFGH") 的逻辑

【问题讨论】:

【参考方案1】:

并假设它不是基于表/查询:

Dim i As Integer

For i = 0 To ComboBox.ListCount-1
    If ComboBox.Column(1, i) = "EFGH" Then
        ComboBox.Value = ComboBox.ItemData(i)
        Exit For
    End If
Next i

【讨论】:

to ListCount-1 :) 我正要添加这个。 有时最好的答案是最简单的 - 简直不敢相信我从来没有想过循环浏览它!【参考方案2】:

假设你的组合是基于一个表的,你可以 DLookUp 表中的值:

 ComboBox.Value = Dlookup("Value","Table","Code='" & sCode & "'")

【讨论】:

这也有效。目前它不是基于表格,但可能会在某个时候出现 启,除非你的值很少,我说的很少是指2或3,它应该基于一个表,以便于维护和用于报告和查询。 我知道 - 整个事情稍后将后端到 SQL Server,但目前我正在等待提供完整的映射列表,我只是在拼凑一个 UI 设计(零后退- end) 向客户展示初始费用。【参考方案3】:

如果源是组合框中选定的值,而目标是未绑定的组合框,请将目标组合框的 .BoundColumn 属性设置为适当的列,然后正常分配组合框值,如 cboX=cboY。即使绑定了目标组合框,您也可以根据需要动态更改绑定的列。

【讨论】:

以上是关于Access VBA:根据非绑定列在组合框中查找项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access VBA 中使用 like

每次使用 access vba 在第一个组合中选择值时,清除链接组合框中的值

Access VBA Listbox.Requery 命令清除列表项

在 Access 中更新按钮 VBA 代码

组合框多选以在 Access 2016 中的文本框中显示所选项目

通过 vba ms 访问将多值列的数据绑定到组合框中