循环遍历VBA中多列列表框的行

时间:2013-12-26 16:59:55

标签: arrays vba collections listbox

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

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

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

任何想法一如既往地非常感谢。谢谢!

1 个答案:

答案 0 :(得分: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