7,789
社区成员
发帖
与我相关
我的任务
分享Option Explicit
'比较两个项目,返回 -1:<, 0:=, 1:>
Private Function CompareItem(ByVal item1 As ListItem, ByVal item2 As ListItem) As Integer
'这里简单地用了字符串比较,可以用其他规则进行比较
CompareItem = StrComp(item1.Text, item2.Text)
End Function
Private Function Min(ByVal v1 As Long, ByVal v2 As Long, ByVal v3 As Long) As Long
Dim v As Long
v = IIf(v1 <= v2, v1, v2)
Min = IIf(v <= v3, v, v3)
End Function
Private Sub Command1_Click()
'保证3个ListView已排序
Dim list1 As ListItems, list2 As ListItems, list3 As ListItems
Dim i As Long
Set list1 = ListView1.ListItems
Set list2 = ListView3.ListItems
Set list3 = ListView2.ListItems
i = 1
While (i <= list1.Count) And (i <= list2.Count) And (i <= list3.Count)
Select Case CompareItem(list1(i), list2(i))
Case -1
list1.Remove i
Select Case CompareItem(list2(i), list3(i))
Case -1
list2.Remove i
Case 0
Case 1
list3.Remove i
End Select
Case 0
Select Case CompareItem(list1(i), list3(i))
Case -1
list1.Remove i
list2.Remove i
Case 0
i = i + 1
Case 1
list3.Remove i
End Select
Case 1
list2.Remove i
Select Case CompareItem(list1(i), list3(i))
Case -1
list1.Remove i
Case 0
Case 1
list3.Remove i
End Select
End Select
Wend
i = Min(list1.Count, list2.Count, list3.Count)
While list1.Count > i
list1.Remove list1.Count
Wend
While list2.Count > i
list2.Remove list2.Count
Wend
While list3.Count > i
list3.Remove list3.Count
Wend
End Sub
'如果index也相同,只有一次遍历
for i = 1 to Lvw1.ListItem.Count
if lvw2(i) == lvw1(i) and lvw3(i) == lvw1(i) then
else
delete lvw1(i) lvw2(i) lvw(3)
end if
next
'index不同
'除了遍历以外,没想到有什么办法