我试图将两个不同的列表组合成一个ComboBox.list,但是其中一些值是相同的,我不希望它们出现两次。
不幸的是,我对VBA不太有经验,错误消息也很常见,所以我不知道为什么我的尝试不起作用。
我在网上找到一个代码,可以很好地将两者结合起来,但是当我添加unique函数时,它没有任何区别,它可以很好地将列表结合起来,但是它似乎忽略了unique函数,所以有很多重复。
这是我一直在使用的代码:
Sub Combo()
Set rng1 = sheet14.Range("Range_1")
Set rng2 = sheet14.Range("Range_2")
For Each cl In rng1
If arStr = "" Then
arStr = cl.Value
Else
arStr = arStr & "," & cl.Value
End If
Next cl
For Each cl In rng2
If arStr = "" Then
arStr = cl.Value
Else
arStr = arStr & "," & cl.Value
End If
Next cl
sheet13.SupplierCmb.List = WorksheetFunction.unique(Split(arStr, ","))
End Sub
我已经测试过,这个唯一的函数只在一个范围内使用,它工作得很好。
2条答案
按热度按时间csga3l581#
我不知道
Unique
-函数的确切规范,但可以确认一维数组存在问题。我建议使用字典来获取列表--这在旧版本的Excel上也可以使用(但在Mac上不行)。通过创建一个范围的并集,你可以简化代码,这样你就只有一个循环。
注意,这是使用早期绑定,所以你需要设置一个对Scripting运行时的引用。如果你不想这样做,定义字典如下:
t8e9dugd2#
你通常会使用字典(根据另一个答案),但由于你调用了工作表函数
UNIQUE()
,我猜你也可以使用VSTACK()
和TOCOL()
(后者用于2d数组)。虽然在VBA中不能作为方法使用,但你仍然可以计算公式:TOCOL()
-在两个范围对象是多维的情况下,“展平”它们中的每一个。第二个参数“3”将确保省略错误或空单元格;VSTACK()
-垂直堆叠两个扁平阵列;UNIQUE()
-仅将唯一项作为一维数组作为列表传递回来。