多列列表框没有显示我想要的数据?

时间:2016-05-04 15:12:18

标签: excel vba excel-vba

我一直在编写一个Excel宏,它匹配两个表之间的名称,并在列表框中显示它们。它只是匹配名称没有问题,但是一旦我尝试从其中一个工作表中包含其他数据,它似乎就不再循环了。

这是我的代码:

Set matchedartistcell = Worksheets("Lots").Cells(curcell.Row, columnofregion)
matching_artist = matchedartistcell.Value
For i = 1 To maxmaster
    If Trim(Worksheets("Master").Cells(i, 1)) = Trim(matching_artist) Then
       ListBox1.AddItem (Worksheets("Master").Cells(i, 2))
       ListBox1.List(0, 1) = Worksheets("Master").Cells(i, 4)
       ListBox1.List(0, 2) = Worksheets("Master").Cells(i, 5)
       ListBox1.List(0, 3) = Worksheets("Master").Cells(i, 6)
       End If
Next i

所以基本上,第一列显示了一个名单列表......但是第二,第三和第四列显示了与第一个匹配在同一行的最后一个匹配的数据(如果这有意义的话)?

我觉得它不会像我希望的那样循环,但我不能为我的生活找出原因......任何帮助都会非常感激!!

谢谢!

为清晰起见编辑:

我使用测试工作簿

包含一些图片以更好地描述问题

这是工作表'Master'上艺术家的一个例子 enter image description here

这是我正在运行宏的工作表示例('Lots') enter image description here

当我为Hannah Smith运行艺术品的宏时,我希望列表框看起来像

马克史密斯英国1940年1999年 Adam Smith澳大利亚1901 1980年 Hannah Smith加拿大1982年

但是,它会返回此信息 enter image description here

马克史密斯获得了汉娜史密斯的国籍和日期,亚当史密斯或汉娜史密斯都没有任何额外的信息。

1 个答案:

答案 0 :(得分:0)

问题是你总是更新(在你的代码中)ListBox的第一行。虽然i从1到该表中的最后一行,但您始终会更新ListBox1.List(0, someColumn)。因此,您总是更新第0行(这是ListBox中的第一行。

尝试一下,让我知道它是否有效:

Set matchedartistcell = Worksheets("Lots").Cells(curcell.Row, columnofregion)
matching_artist = matchedartistcell.Value2
For i = 1 To maxmaster
    If Trim(Worksheets("Master").Cells(i, 1)) = Trim(matching_artist) Then
       ListBox1.AddItem (Worksheets("Master").Cells(i, 2))
       ListBox1.List(ListBox1.ListCount - 1, 1) = Worksheets("Master").Cells(i, 4)
       ListBox1.List(ListBox1.ListCount - 1, 2) = Worksheets("Master").Cells(i, 5)
       ListBox1.List(ListBox1.ListCount - 1, 3) = Worksheets("Master").Cells(i, 6)
    End If
Next i