在 Access 上使用二维数组填充多列组合框

Populate a Multi-column Combobox with a 2D array on Access

我试过这个方法:

ComboBox1.ColumnCount = 2

Dim Films(1 To 5, 1 To 2) As String
Dim i As Integer, j As Integer

Films(1, 1) = "Lord of the Rings"
Films(2, 1) = "Speed"
Films(3, 1) = "Star Wars"
Films(4, 1) = "The Godfather"
Films(5, 1) = "Pulp Fiction"

Films(1, 2) = "Adventure"
Films(2, 2) = "Action"
Films(3, 2) = "Sci-Fi"
Films(4, 2) = "Crime"
Films(5, 2) = "Drama"

ComboBox1.List = Films

source

但是 .List 属性 在 Access 上不起作用。有什么想法吗?

Access 中的 "Form" 与 Excel 中的 "UserForm" 不同 element/object,而 "source" link指向 (https://www.excel-easy.com/vba/examples/multicolumn-combo-box.html).

在 Access 中,从 table 或查询中将信息放入组合框(或列表框)是个好主意。您当然可以使用 VBA 对其进行编码,但随后您可能会发现自己 adding/editing 到处都是 VBA 的漏洞,因为在 Access 中,使用 [=78 一切都会更自然=] 和数据库引擎。

这是一个更大的话题,但基本上您应该为 "Films" 和 "Categories"

设置不同的 table

表 1:

表 2:

那么您应该定义关系,因为您数据库中的电影数量很可能与类别数量不同。说我们想避免您必须添加另一部电影的情况,让我们说 "Die hard" 到您的电影列表中。那可能属于 "Action" 类别。在数据库中,我们不想重复自己。只是我们将通过 ID,通过它的值引用 categoryID。

所以,完成后您需要在 Access 中创建一个表单。创建一个可以为您获取值的查询:

在此之后,您可以定义组合的来源,例如使用向导:

这样您就可以在各自的 table 中单独维护每个列表。

这是创建的查询:

  • 在“数据”选项卡上,您可以决定使用相对于数据源的绑定列。
  • 在“格式”选项卡上,您可以调整组合框中列的宽度。使用 0 长度隐藏列。

这样就不需要 VBA 代码了。

如果需要,也可以使用 VBA 创建或编辑查询,但那是另一回事了。

希望这对您有所帮助。

正如June7所说,循环使用ComboBox.AddItem()方法。出于您的目的,ComboBox 不得绑定到数据源:行源类型 属性 应设置为 "Value List"。要将多列字符串添加到 ComboBox 行,请使用分号来分隔列。例如:

ComboBox1.AddItem (Films(1, 1) & ";" & Films(1, 2))

Dim rowStr As String
rowStr = Films(1, 1) & ";" & Films(1, 2)
ComboBox1.AddItem (rowStr)

如果您没有指定行索引参数,AddItem() 会自动将行追加到 ComboBox 列表的末尾。有关详细信息,请参阅 Office 开发人员中心的 ComboBox.AddItem method

截图:VBA Demonstration Image