Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 删除级联组合框VBA中的重复项_Excel_Vba_Combobox - Fatal编程技术网

Excel 删除级联组合框VBA中的重复项

Excel 删除级联组合框VBA中的重复项,excel,vba,combobox,Excel,Vba,Combobox,因此,我有一系列级联组合框,它们根据第一个框的值填充,如下所示: IDpre-填充>许可证号码>州>名称 我使用以下代码填充组合框: If cmb_Project.ListIndex <> -1 Then cmb_State.Clear strSelected = cmb_Licence.Value LastRow = Worksheets("Entitlement Owners").Range("A" &

因此,我有一系列级联组合框,它们根据第一个框的值填充,如下所示:

IDpre-填充>许可证号码>州>名称

我使用以下代码填充组合框:

If cmb_Project.ListIndex <> -1 Then
            cmb_State.Clear
           strSelected = cmb_Licence.Value

           LastRow = Worksheets("Entitlement Owners").Range("A" & Rows.Count).End(xlUp).row

           Set rngList = Worksheets("Entitlement Owners").Range("c2:c" & LastRow)
           Set rngCompany = Worksheets("Entitlement Owners").Range("b2:b" & LastRow)

           For Each rngCompany In rngList

                 If rngCompany.Value = strSelected Then

                      cmb_State.AddItem rngCompany.Offset(, -1)

                 End If

           Next rngCompany

      End If
所以在组合框1中,我有:001002003004,这是正确的

当我在第一个框中选择004时,第二个框填充:SA,SA,这不是我想要的

我一直在试图遵循以下据称将删除重复的,但不允许我正在做的比较


有人知道如何从搜索范围中删除重复项吗?

要在填充列表时删除重复项,可以使用字典,然后将组合的列表属性设置为字典的键。i、 e

Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
For Each rngCompany In rngList
    If rngCompany.value = strSelected Then dict(rngCompany.Offset(, -1).text) = 0 ' add key to dict
Next rngCompany
cmb_State.List = dict.Keys

我知道有问题,但你的描述有点混乱。您的代码在C列中搜索,但当我在与A列对应的第一个框中选择004时,您会说。同时设置rngCompany=。。。在您的代码中,这是无用的,因为您会立即为变量分配其他内容。我建议您检查并编辑该问题。@A.S.H-关于您的第一条评论,第一个选择存储在变量strselected中,A行中的搜索仅用于查找最后一个活动行。另外,我不明白我在哪里给rngcompany分配了不同的值?它在For循环中使用,然后用于与所选字符串进行比较?但004在a列中,不是吗?设置rngCompany=worksheetEntitlementOwners。范围B2:b&LastRow,后面紧跟着rngList中的每个rngCompany;第一个赋值是无用的。@A.S.H是的,但是当表单加载时,包含数字001002003等的b组合框1会被填充到代码的另一部分,因此它与此组合框无关,只需将所选值发送到前面标识的vaairable即可。感谢您提供,我只是想了解脚本字典是如何删除重复值的?@scb998该字典是一个集合对象,可确保其键的唯一性。无论何时引用现有密钥,都将分配相同的条目,不会重复任何密钥。查看更多信息。太棒了-非常感谢!因此,请澄清一下,如果键设置为0,那么它不会向键分配任何内容,即,我不会在组合框中看到一堆0?不幸的是,当它尝试设置字典键时,会抛出应用程序定义或对象定义的错误。单元格中是否存在NA或REF等错误?老实说,我看不出其他失败的原因,你需要用你的数据检查一下。在最坏的情况下,您可以在循环之前的下一个错误恢复中放置一些,并查看组合是否正确填充。
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
For Each rngCompany In rngList
    If rngCompany.value = strSelected Then dict(rngCompany.Offset(, -1).text) = 0 ' add key to dict
Next rngCompany
cmb_State.List = dict.Keys