excel 在VBA中从一个ArrayList移除另一个ArrayList中的项

xwbd5t1u  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(200)

我正在向两个不同的数组列表中添加项,然后我想从第一个数组列表中删除存在于第二个数组列表中的任何项。我在尝试删除重复值时遇到问题。该项存在于我试图删除它的数组列表中,所以我不确定为什么它不起作用。我正在自学该项目的VBA,所以如果代码多余或混乱,请道歉。
下面是给我带来问题的代码部分:

Set Tbl = Sheets("Sheet6").ListObjects("table17")
For x = 1 To Tbl.ListRows.Count
    UAapp.Add Tbl.DataBodyRange(x, 3)
Next x

For Each Item In App
    UAapp.Remove Item
    Stop
Next Item

我尝试使用each和to语句创建循环,当我使用对象监视时,我可以看到Item存在于UAapp数组列表中,但当循环迭代时,它会移动到下一个项目,而不会删除它。

olmpazwi

olmpazwi1#

当你打电话

UAapp.Add Tbl.DataBodyRange(x, 3)

你要向数组列表中添加什么?你可能希望它是单元格的内容,但实际上你添加的是对单元格本身的引用。你需要添加.Value来确保你添加的是单元格的值,而不是对单元格的引用。
例如:

Sub Tester()

    Dim lstA As Object, lstB As Object, c As Range, itm
    Set lstA = CreateObject("System.Collections.ArrayList")
    Set lstB = CreateObject("System.Collections.ArrayList")

    For Each c In Range("A1:A5")
        lstA.Add c.Value 'note use of .Value
    Next c
    
    For Each c In Range("B1:B5")
        lstB.Add c.Value
    Next c
    
    For Each itm In lstA
        If lstB.contains(itm) Then lstB.Remove itm
    Next itm
    
    For Each itm In lstB
        Debug.Print itm
    Next itm
    
End Sub

相关问题