我在工作簿中有三个组合框,我想通过菊花链将它们组合在一起。单击组合框上的下拉按钮后,按下键盘上的向下箭头时,每个组合框的项目列表都会刷新。第二个组合框列表取决于在第一个组合框中所做的选择。我已经使用脚本字典构建了这些。
strCustComboBox
是当前组合框应依赖的上一个组合框中的值。
rngProject
正在查看包含大量引号ID的范围。我从此列偏移到保留上一个组合框的值的列,如果该值等于strCustComboBox
,则将rngCompany
值添加到脚本字典中
我在循环中遇到一个问题,在该循环中,我试图删除写入脚本字典的rngCompany
值的重复数据,该脚本字典用于构建要在组合框中显示的列表。我的代码在下面。
Sub UpdateComboBox1FromDashData()
Dim strCustComboBox As MSForms.ComboBox
Dim strComboBox As MSForms.ComboBox
Dim rngCompany As Range
Dim rngProject As Range
Dim d As Object, c As Variant, i As Long
Worksheets("QuoteEditor").Unprotect "xxxx"
Application.ScreenUpdating = False
Set strCustComboBox = ThisWorkbook.Worksheets("QuoteEditor").ComboBox4
Set strComboBox = ThisWorkbook.Worksheets("QuoteEditor").ComboBox1
If strCustComboBox = "" Then
MsgBox "Please select a project first", vbOKCancel
Else
End If
ThisWorkbook.Worksheets("DashboardData").Select
Call FindLastRow("A", "10")
Set d = CreateObject("Scripting.Dictionary")
c = Range("A10:A" & strLastRow)
Set rngProject = ThisWorkbook.Worksheets("DashboardData").Range("A10:A" & strLastRow)
i = 1
For Each rngCompany In rngProject
If UCase(rngCompany.Offset(, 7).Value) = UCase(strCustComboBox) Then
If d.exists(rngCompany) = True Then
Else
d.Add rngCompany, i
i = i + 1
End If
Else
End If
Next rngCompany
For Each Item In d
strComboBox.AddItem (Item)
Next Item
我认为我在d.exists(rngCompany)
上使用的位置是错误的,但是我不确定。子例程完成后,我仍然得到重复的数据,返回到组合框列表。
我还根据建议的重复线程尝试了以下代码:
With d
For Each rngCompany In rngProject
If UCase(rngCompany.Offset(, 7).Value) = UCase(strCustComboBox) Then
If Not .exists(rngCompany) Then
d.Add rngCompany, Nothing
Else
End If
End If
Next rngCompany
End With
任何人都可以看到这两个地方出了什么问题吗?
答案 0 :(得分:4)
您将答案隐藏在自己的问题中(强调我的意思):
我要在其中重复删除rngCompany 值
d.Exists(rngCompany)
无法以您编写的方式返回true,因为您正在 range Dictionary >,而不是其内容。由于您要测试的项目是迭代For Each rngCompany In rngProject
的一部分,因此可以保证只有不同的范围。
解决方案很简单-您需要显式调用rngCompany
的默认成员:
If Not d.Exists(rngCompany.Value) Then
d.Add rngCompany.Value, i
i = i + 1
End If