在Access上使用2D数组填充多列组合框

时间:2020-05-06 19:58:17

标签: arrays vba ms-access combobox

我试图遵循这种方法:

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上不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如June 7所述,请循环使用 ComboBox.AddItem()方法。出于您的目的,不得将ComboBox绑定到数据源:它的行源类型属性应设置为“值列表”。要将多列字符串添加到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 Dev Center中的ComboBox.AddItem method

屏幕截图:VBA Demonstration Image

答案 1 :(得分:2)

Access中的“表单”与Excel中“源”链接指向(https://www.excel-easy.com/vba/examples/multicolumn-combo-box.html)指向的“用户表单”中的元素/对象类型不同。

在Access中,最好从表或查询中将信息放入组合框(或列表框)中。您当然可以使用VBA对其进行编码,但是随后您可能会发现自己在其中随处添加/编辑大量VBA,因为在Access中,使用SQL和数据库引擎可以使所有操作变得更加自然。

这是一个较大的主题,但基本上,您可能应该为“电影”和“类别”使用不同的表

表1:

enter image description here

表2:

enter image description here

然后,您应该定义关系,因为数据库中的电影数量很可能与类别不同。假设我们要避免您不得不添加另一部电影的情况,那么请在电影列表中说“努力奋斗”。那可能属于“行动”类别。在数据库中,我们不想重复自己。只是我们将通过ID来按其值引用categoryID。

enter image description here

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

enter image description here

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

enter image description here

enter image description here

enter image description here

因此,您可以将每个列表分别维护在各自的表中。

这是创建的查询:

enter image description here

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

这种方式不需要VBA代码。

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

希望这会有所帮助。