Множественные зависимые комбинированные списки Excel VBA - PullRequest
0 голосов
/ 25 октября 2019

Четыре комбобокса

У меня есть четыре комбинированных списка. Я инициализирую первый с

Fill DC1ComboBox
With DC1
    .AddItem "Door Open/Close"
    .AddItem "Jacket On/Off"
    .AddItem "Cycle Over"
    .AddItem "Alarm"
    .AddItem "Keycard Reader"
End With

Вторые параметры комбинированного списка зависят от первого выбора, который я сделал с Select Case на основе DC1.ListIndex, и это прекрасно работает.

Я начал с3-й комбинированный список (который зависит от второго, который зависит от первого), и я думаю, что должен быть лучший способ, чем то, как я вкладываю выбранные случаи, потому что к тому времени, как я доберусь, это будет слишком долго4-е поле.

Для того, что я пытаюсь сделать, Куртка, Цикл и Тревога могут быть выбраны только один раз из четырех полей, Двери и Ключ-карта могут быть выбраны дважды. Пример: Сухой контакт 3 Пример выбора

А вот фрагмент вложенного случая выбора, который я начал: Вложенный случай выбора

1 Ответ

0 голосов
/ 25 октября 2019

Вместо использования дел, вероятно, легче увеличивать переменные каждый раз, когда выбирается определенная опция, а затем проверять, сколько раз эта опция была выбрана. Подпрограмма ниже для ComboBox # 1, и вы можете использовать аналогичные подпрограммы для # 2 и # 3.

Public jacket As Integer
Public alarm As Integer
Public cycle As Integer
Public door As Integer
Public keycard As Integer

Private Sub ComboBox1_Change()

'check value of combobox and increment variables
If ComboBox1.Value = "Jacket On/Off" And lastValue <> ComboBox1.Value Then
    jacket = jacket + 1
End If

If ComboBox1.Value = "Cycle Over" And lastValue <> ComboBox1.Value Then
    cycle = cycle + 1
End If

If ComboBox1.Value = "Alarm" And lastValue <> ComboBox1.Value Then
    alarm = alarm + 1
End If

If ComboBox1.Value = "Keycard Reader" And lastValue <> ComboBox1.Value Then
    keycard = keycard + 1
End If

    If ComboBox1.Value = "Door Open/Close" And lastValue <> ComboBox1.Value Then
    door = door + 1
End If

'check totals of variables and add correct items
With ComboBox2

    .clear

    If jacket < 1 Then
    .AddItem "Jacket On/Off"
    End If

    If cycle < 1 Then
    .AddItem "Cycle Over"
    End If

    If alarm < 1 Then
    .AddItem "Alarm"
    End If

    If keycard < 2 Then
    .AddItem "KeyCard"
    End If

    If door < 2 Then
    .AddItem "Door Open/Close"
    End If

End With

'disable ComboBox after use
ComboBox1.Enabled = False

End Sub

Обратите внимание, что мы должны отключить ComboBox после выбора, потому что эта возрастающая математика не будет работатьесли кто-то вернется в ComboBox и повторно выберет больше элементов.

Если вы хотите написать это без необходимости заполнять поля в заранее определенном порядке, то это будет действительно сложно без использования Классов. Вот ссылка на то, как их использовать, если вы заинтересованы: http://www.cpearson.com/excel/classes.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...