У меня есть три поля со списком в книге, которые я хочу объединить в цепочку.Списки элементов для каждого поля со списком обновляются, когда вы нажимаете стрелку вниз на клавиатуре после нажатия кнопки раскрывающегося списка в поле со списком.Список второго поля со списком зависит от выбора, сделанного в первом поле со списком.Я построил их с использованием словарей сценариев.
strCustComboBox
- это значение в предыдущем поле со списком, от которого должно зависеть текущее поле со списком.
rngProject
просматривает диапазон с множеством идентификаторов котировок.Я переместился из этого столбца в столбец, в котором содержатся значения для предыдущего поля со списком, и если это значение равно 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
Может кто-нибудь увидеть, гдечто-нибудь из этого идет не так?