Access多选列表框:如何生成选中项文本字符串而非索引值?
解决Access多选列表框导出文本主键为逗号分隔字符串的问题
你的问题出在lbx.ItemsSelected(varItem)返回的是选中项的索引位置,而非列表框绑定列的实际文本值。要获取你设置的文本主键,需要通过列表框的Column属性或者ItemData方法提取对应列的内容。
修正后的代码
假设你的文本主键是列表框数据源的第一列(Access列索引从0开始),可以使用以下代码:
Function LbxItems() As String ' 返回多选列表框选中项的逗号分隔文本字符串 Dim lbx As ListBox Dim varSelected As Variant Dim strReturn As String strReturn = "" Set lbx = Me!OptionL ' 遍历所有选中项(ItemsSelected存储的是选中行的索引) For Each varSelected In lbx.ItemsSelected If strReturn = "" Then ' 提取目标列的文本值,0对应数据源第一列,可根据实际调整 strReturn = lbx.Column(0, varSelected) Else strReturn = strReturn & ", " & lbx.Column(0, varSelected) End If Next varSelected Set lbx = Nothing LbxItems = strReturn End Function
关键说明
- 遍历方式修正:原代码用
For varItem = 0 To varItems -1遍历是错误的——ItemsSelected是选中项的索引集合,选中项不一定连续,必须用For Each遍历该集合。 - 获取实际值:
lbx.Column(列索引, 行索引):第一个参数是目标列的索引(从0开始),比如你的文本主键在数据源第三列,就改成2;- 如果列表框设置了
BoundColumn属性(比如绑定列是第2列,BoundColumn=2),也可以用lbx.ItemData(varSelected)直接获取绑定列的值,效果等价于lbx.Column(lbx.BoundColumn -1, varSelected)(因为BoundColumn从1开始计数)。
内容的提问来源于stack exchange,提问作者LindsayRose
相关产品推荐
相关产品推荐

