【问题标题】:Access: Multi-Listbox - Select items if they equal a specific string using VBA访问:多列表框 - 如果项目等于使用 VBA 的特定字符串,则选择项目
【发布时间】:2020-12-17 14:46:58
【问题描述】:

我有一个可访问的表单,它有一个名为“lstLoadedFiles”的列表框,其中显示了已上传到我的数据库的所有文件的列表。

此列表框包含 3 列,是一个多选列表框,因此用户可以一次从列表中选择多个项目。

lisbox 如下所示:

Type        FileName            Status
Blue        Bluefile1.xls       Loaded
Blue        Bluefile2.xls       Loaded
Red         Redfile3.xls        Loaded
Green       Greenfile1.xls      Loaded

然后用户可以在此列表框中选择多条记录,然后单击一个按钮,代码将运行以验证已选择的所有项目的文件。

此列表框最多可包含 20 个文件名。我希望用户能够选择一个按钮,它将突出显示列表框中与某种类型相关的所有记录,例如'蓝色'。 (这是必需的,因此如果用户只有一种类型的所有相关文件,他们可以通过该过程而不必等待其他类型的剩余文件 - 他们不必单独从列表框中选择所有文件对于一种类型,例如蓝色)

我的问题是此列表框中的项目永远不会处于相同的顺序并且永远不会具有相同数量的文件(例如,对于蓝色类型可能上传 3 个文件,但下次运行该过程时只有 1 个文件可能会被上传)所以使用类似下面的东西是行不通的:

Forms("MyForm").lstLoadedFiles.Selected(0) = True

有没有办法可以将其编码为如下内容:

If optSelectAllBlue = True Then
    lstLoadedFiles. Select Items where column type = 'Blue' .....

其中 optSelectAllBlue 将是一个按钮。还是列表框无法做到这一点?

提前致谢,

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    遍历列表框项目并测试值是否 = 所选颜色以及是否匹配所选项目。诀窍是弄清楚如何使颜色值动态化。如果您使用的 OptionGroup 只有 3 个红色/绿色/蓝色单选按钮,则类似于:

    Dim x As Integer
    With Me.lstLoadedFiles
    For x = 0 To .ListCount - 1
        If .ItemData(x) = Choose(Me.optColor, "Red", "Green", "Blue") Then .Selected(x) = True
    Next
    End With
    

    【讨论】:

    • 谢谢,我最终使用了组合框而不是单选按钮,但使用了您的代码并且它有效。我最终使用的代码是:Dim x As Integer With Forms("MyForm").lstLoadedFiles For x = 0 To .ListCount - 1 If .Column(1, x) = cboType.Value Then .Selected(x) = True Next End With
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2011-07-08
    • 1970-01-01
    • 2021-12-09
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多