VBA 如何确定在列表框中选择了哪一行?

Posted

技术标签:

【中文标题】VBA 如何确定在列表框中选择了哪一行?【英文标题】:VBA How to determine which row was selected in a Listbox? 【发布时间】:2020-10-23 22:18:41 【问题描述】:

如何确定,ListBox 中选择了哪一行?我在这里问是因为到目前为止我发现的所有内容都需要遍历所有行以检查是否被选中,但我想知道是否存在简单的东西,因为我正在使用模式MultiSelect 0-fmMultiSelectSingle 只有一个整数是预计...

【问题讨论】:

如果您关闭了多选功能,您只需获取listbox.value。只有当多选开启时,您才需要循环。 感谢您的解释很有帮助! Listbox1.Value 将为您提供值,Listbox1.ListIndex + 1 将为您提供选定的行。 If Listbox1.ListIndex <> -1 Then MsgBox "Selected row = " & Listbox1.ListIndex + 1 Else MsgBox "Nothing Selected" 【参考方案1】:

如果您使用ListFillRange 属性填充列表框,或者使用了连续的工作表区域,则列表框中的第 3 项将来自该区域中第 3 个单元格的行。

R = Range(ListFillRange).Rows([Listindex]).Row

其中 [Listindex] 是所选列表框项的 ListIndex。

如果没有这种简单的方法,f.i.因为列表是使用过滤器创建的,所以要做的是创建一个带有额外隐藏列的多列列表框,并在列表创建时记录行号。

只有当列表框中的项目不是从工作表中提取出来时才需要循环,这就是为什么这样做不是创建列表框列表的最佳解决方案的原因。

【讨论】:

以上是关于VBA 如何确定在列表框中选择了哪一行?的主要内容,如果未能解决你的问题,请参考以下文章

Access VBA 如何根据多选列表框中的选择过滤记录集?

如何获得MFC列表框中选中的数据

从列表框中删除项目(MS Access VBA)

ACCESS VBA 从列表框中选择多个值并执行查询名称

vba,如何从列表框中的工作表中删除过滤后的数据

通过在列表下拉组合框中选择它来访问 VBA 代码以转到另一个表单上的特定记录