我一直在编写一个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
所以基本上,第一列显示了一个名单列表......但是第二,第三和第四列显示了与第一个匹配在同一行的最后一个匹配的数据(如果这有意义的话)?
我觉得它不会像我希望的那样循环,但我不能为我的生活找出原因......任何帮助都会非常感激!!
谢谢!
为清晰起见编辑:
我使用测试工作簿
包含一些图片以更好地描述问题当我为Hannah Smith运行艺术品的宏时,我希望列表框看起来像
马克史密斯英国1940年1999年 Adam Smith澳大利亚1901 1980年 Hannah Smith加拿大1982年
马克史密斯获得了汉娜史密斯的国籍和日期,亚当史密斯或汉娜史密斯都没有任何额外的信息。
答案 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