VBA中从一个ArrayList移除另一ArrayList中存在的项失败问题求助
解决VBA ArrayList移除元素失效的问题
核心原因:数据类型不匹配
你当前代码中,UAapp.Add Tbl.DataBodyRange(x, 3)直接把Range对象存入了ArrayList,而非单元格的实际值。如果App中的Item是普通文本/数值类型,两者类型完全不匹配,ArrayList的Remove方法找不到对应项,自然不会执行移除操作。
修正方案
确保UAapp存储的是单元格值而非Range对象
修改添加元素的代码,增加.Value属性,存入单元格的实际内容:Set Tbl = Sheets("Sheet6").ListObjects("table17") For x = 1 To Tbl.ListRows.Count ' 存储单元格的值,而非Range对象 UAapp.Add Tbl.DataBodyRange(x, 3).Value Next x安全移除所有匹配项
遍历App时,先判断目标ArrayList是否包含当前Item,再执行移除。如果需要移除所有重复匹配项(不止第一个),用循环处理:Dim Item As Variant For Each Item In App ' 先检查Item是否存在,避免报错 If UAapp.Contains(Item) Then ' 循环移除所有匹配的项 Do While UAapp.Contains(Item) UAapp.Remove Item Loop End If Next Item
补充说明
- 如果你只需要移除第一个匹配项,去掉
Do While循环,直接调用一次UAapp.Remove Item即可。 - 注意:如果直接遍历UAapp本身并移除元素,会因为集合结构变化导致遍历异常,但你当前遍历的是
App集合,所以不存在这个问题。
内容的提问来源于stack exchange,提问作者skhu
相关产品推荐
相关产品推荐

