【问题标题】:Loop through the rows of a multi-column listbox in VBA循环遍历 VBA 中的多列列表框的行
【发布时间】:2014-01-14 07:34:30
【问题描述】:

我遇到了列表框问题。我正在尝试将多列列表框的内容作为列表框每一行的数组复制到集合中。我意识到我可以遍历列表框的每一行和每一列,但我试图找到一种方法来返回列表框的每一行并将其直接分配给数组。像这样的:

For each item in ListBox
    tempArrayA = item
    tempCollection.add item
Next item

但是,当我这样做时,它会给我每行的每个单独的字段,而不是像我希望的那样一次提供整个行。我一直在谷歌搜索,我会继续搜索,但我只是觉得通过迭代列表框中的每个项目而不是选择每一行然后迭代该行的每一列来做到这一点会很好,因为我有其他在选择列表框的一行时执行的代码。

一如既往,我们非常感谢任何想法。谢谢!

【问题讨论】:

    标签: arrays vba collections listbox


    【解决方案1】:

    您可以利用工作表 Index 函数,它适用于数组这一事实,以及作为其 Column 参数输入的 0 会抓取整行这一事实。真的很酷!:

    Private Sub UserForm_Activate()
    Dim varList As Variant
    Dim varRow As Variant
    Dim i As Long
    Dim tempCollection As Collection
    
    Me.ListBox1.List = ActiveSheet.Range("A2:B20").Value
    varList = Me.ListBox1.List
    Set tempCollection = New Collection
    For i = 1 To Me.ListBox1.ListCount
        varRow = Application.WorksheetFunction.Index(varList, i, 0)
        tempCollection.Add varRow, CStr(i)
        Debug.Print tempCollection(i)(1); " "; tempCollection(i)(2)
    Next i
    End Sub
    

    【讨论】:

    • 这太棒了!我不知道索引可以以这种方式使用!非常非常好用。谢谢你的提示!
    • 我很高兴它有帮助!我很喜欢Index 使用它的方式。我确实意识到我犯了一个以前犯过的愚蠢错误,即认为我需要两个下一个Application.TransposesRange 强制转换为List,而我可以指定Value 的属性Range。我已编辑以更正此问题。
    猜你喜欢
    • 2017-04-26
    • 2017-10-19
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多