Я пытаюсь настроить 3 ComboBoxes в пользовательской форме.Excel VBA UserForm Dependent ComboBox для нескольких опций
- ComboBox1 = Да/Нет/Blank
ComboBox2 = Перечень параметров
- ОПЦИЯ1
- Option2
- Вариант3
- ОПЦИЯ4
- Option5
- Opt ion6
- Option7
- Option8
ComboBox3 = где у меня вопрос, и мне нужна помощь.
ComboBox3 зависит от комбинации ComboBox1 и ComboBox2
Я надеюсь, что я могу объяснить это хорошо.
Например.
Если ComboBox1 = "" Тогда не отображаются какие-либо параметры в ComboBox2 и Combobox3
Если ComboBox1 = Да и ComboBox2 = Option1 Тогда дайте мне этот список опций
Если ComboBox1 = нет и ComboBox2 = Option1 Тогда Дайте мне этот другой список вариантов.
Если ComboBox1 = Да и ComboBox2 = Option2 Тогда дайте мне этот список опций
Если ComboBox1 = нет и ComboBox2 = Option2 Тогда дайте мне этот другой список опций.
И так далее для каждого варианта.
Надеюсь, что это имеет смысл, и кто-то может пролить свет на это.
Дайте мне знать, если вам нужна дополнительная информация.
Спасибо.
UPDATE
После исследования я наткнулся на скрипт, который делает работу, но у меня возникают вопросы, реализующие его на мой текущий код. Я тестировал его в отдельной форме, и все работает по назначению. Как я могу интегрировать это в свой текущий UserForm_Initialize()?
Я разместил эту часть в начале формы перед пользовательским символом UserForm_Initialize(). (Я также пытался добавить его после)
Private dic As Object
Private Sub ComboBox1_Change()
With Me
.ComboBox2.Clear
.ComboBox3.Clear
If .ComboBox1.ListIndex <> -1 Then
.ComboBox2.List = dic(.ComboBox1.Value).keys
End If
End With
End Sub
Private Sub ComboBox2_Change()
With Me
.ComboBox3.Clear
If .ComboBox2.ListIndex <> -1 Then
.ComboBox3.List = dic(.ComboBox1.Value)(.ComboBox2.Value).keys
End If
End With
End Sub
Это вторая часть, которая идет в UserForm_Initialize() к югу, и я получаю сообщение об ошибке «Run-Time Error 9. Подстрочных вне диапазона».Рабочий лист «Списки» существует и содержит всю необходимую информацию. Если я попробую это отдельно в другой форме, это сработает.
Private Sub UserForm_Initialize()
Dim a, i As Long
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = 1
a = Sheets("Lists").Cells(1).CurrentRegion.Value
For i = 2 To UBound(a, 1)
If Not dic.exists(a(i, 2)) Then
Set dic(a(i, 2)) = CreateObject("Scripting.Dictionary")
End If
If Not dic(a(i, 2)).exists(a(i, 1)) Then
Set dic(a(i, 2))(a(i, 1)) = CreateObject("Scripting.Dictionary")
End If
dic(a(i, 2))(a(i, 1))(a(i, 3)) = i
Next
Me.ComboBox1.List = dic.keys
End Sub
Это то, что изначально выглядит UserForm_Initialize() без этого кода. Это для меня загрузить некоторые другие comboboxes.
Private Sub UserForm_Initialize()
Dim rngResponse As Range
Dim ws As Worksheet
Set ws = Worksheets("Lists")
For Each rngResponse In ws.Range("Response")
Me.cbRes1.AddItem rngResponse.Value
Me.cbRes2.AddItem rngResponse.Value
Me.cbRes3.AddItem rngResponse.Value
Me.cbRes4.AddItem rngResponse.Value
Me.cbRes5.AddItem rngResponse.Value
Me.cbRes1.AddItem rngResponse.Value
Next rngResponse
End Sub
Используйте событие 'ComboBox_Change' в пользовательской форме, чтобы запрограммировать это. Сначала сделайте это для ComboBox1, чтобы, если он пуст, удалите остальные два и очистите список ComboBox 3. Затем измените событие на ComboBox2, чтобы настроить параметры ComboBox3 на основе того, что было выбрано в ComboBoxes 1 и 2. Если вы столкнулись с определенными проблемами, обновите свой вопрос с помощью кода, с которым вы столкнулись, и где у вас проблемы. – tigeravatar
Спасибо tigeravatar. Я сделал все, что мог, и у меня нет идей, и я опубликовал обновление о том, что я сделал до сих пор. – BlueSun3k1
В вашем описании и в опубликованном примере скрипта он говорит только о 3 комбобоксах. Однако в вашем исходном коде UserForm_Initialize он отображает пять списков со списком. Мы работаем с тремя или пятью списками? – tigeravatar