首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除VBA组合框中的重复项

删除VBA组合框中的重复项
EN

Stack Overflow用户
提问于 2020-07-20 11:50:32
回答 2查看 224关注 0票数 0

我有下面的代码来填充一个列表框,因此我想从我的组合框中删除重复的内容。我不知道怎么做:

代码语言:javascript
运行
复制
 Private Sub CommandButton1_Click()
     Dim ws_suivi As Worksheet
    Set ws_suivi = ActiveWorkbook.Worksheets("suivi")
    Fin_Liste_suivi = ws_suivi.Range("A65530").End(xlUp).Row
    
    For i = 2 To Fin_Liste_suivi
        UserForm_SDE.ComboBox_Type_Rapp.AddItem ws_suivi.Range("AD" & i)
    Next
    
    UserForm_SDE.Show
    
    End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-20 13:22:44

通常值得搜索的是,是否存在一个用于VBA的库,以节省您重新发明轮子的费用。

VBA的一个特别麻烦之处在于,虽然我们有诸如集合和Scripting.Dictionaries这样有用的结构,但是在填充这些对象之后,没有一种简单的方法可以将信息输入到这些对象中,或者对数据进行大量的处理。

我有一个项目,它对数组/scripting.dictionariews进行了大量的处理,为了使我的生活更加轻松,我在C#中创建了一个名为Kvp (用于键值对)的VBA库,这有点像steriods上的Scripting.Dictionary。

您可以从这里下载Kvp对象的库、源代码和文档。

一旦添加了对Kvp库的引用,就可以以标准的方式声明Kvp对象。

代码语言:javascript
运行
复制
Dim myKvp as Kvp
Set myKvp=New Kvp

然后,可以在单个语句中从excel电子表格中添加1D范围。

代码语言:javascript
运行
复制
myKvp.AddByIndexFromArray <excel range>.Value

,它给出了长整数与单元格值的Kvp。

OP希望得到一个唯一值的列表。要用Kvp实现这一点,我们可以使用Mirror方法来创建唯一值的Kvp。

代码语言:javascript
运行
复制
Dim myMirroredKvp as Kvp
set myMirroredKvp=myKvp.Mirror

Mirror方法返回两个项Kvp,其中项目0是唯一项的Kvp,而第一个项是找到项目的第一个键,第1项是原始密钥对值的Kvp,其中的值是重复的。

然后,可以使用GetKeys方法获得一个键数组。

代码语言:javascript
运行
复制
Dim myUniqueValues as Variant 
myUniqueValues = myMirroredKvp.GetItem(0).GetKeys

还是希望将项目按相反顺序排序?

代码语言:javascript
运行
复制
myUniqueValues - myMirroredKvp.GetItem(0).GetKeysDescending

以上可缩短为

代码语言:javascript
运行
复制
myUniqueValues = myKvp.Mirror.GetItem(0).GetKeysDescending

我发现Kvp库很有用。我希望你能做到!!

票数 3
EN

Stack Overflow用户

发布于 2020-07-20 12:06:42

我发现:

代码语言:javascript
运行
复制
Dim Valeur As String
    Dim i As Integer
    Dim j As Integer
    'For each element in the list
    For i = 0 To lst_ref.ListCount - 1
       Valeur = Combobox.List(i)
        For j = i + 1 To Combobox.ListCount - 1
            'If the element exist, delete it
            If Valeur = Combobox.List(j) Then
                Call Combobox.RemoveItem(j)
            End If
        Next j
    Next i

它采取乞讨的组合框,并检查该值是否再次红色在组合框的末尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62994772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档