Итак, у меня есть два поля со списком, Combobox1
и Combobox2
. Если пользователь выбирает «Яблоко» для Combobox1
, я хочу, чтобы значения для Combobox2
были «Соус» и «Семена».
Аналогичным образом, если пользователь выбирает «Blueberry» для Combobox1, я бы хотел, чтобы значения Combobox2 выбирали из «Pie» и «Cobbler».
Мне трудно понять, как сделать значения для второго поля со списком на основе первого выбора. Я думаю, что это было бы что-то вроде этого...
Private Sub Combobox1_Change()
If Combobox1= Apple Then
Combobox2.AddItem "Sauce"
Combobox2.AddItem "Seeds"
End If
If Combobox1= BlueberryThen
Combobox2.AddItem "Pie"
Combobox2.AddItem "Cobbler"
End If
End Sub
Событие onChange работает на основе теста, который я сделал, но независимо от того, что я выбираю для первого поля со списком, второе поле со списком пусто.
Ценности не работают? Что происходит, когда вы пробуете код?
Поместите Option Explicit
вверху каждого модуля. Он обеспечивает объявление переменных и сообщает о необъявленных или неправильно написанных переменных/константах во время компиляции. Чтобы это автоматически добавлялось в новые модули, установите параметр Требовать объявление переменной в редакторе VBA.
Метод со списком AddItem
добавит элемент в список ValueList
. Но я сомневаюсь, что это то, чего вы действительно хотите. Если пользователь выбрал "Яблоко" в первой комбинации, а затем вернулся и выбрал "Черника", я подозреваю, что вы хотите, чтобы вторая комбинация содержала только варианты "Черника", а не оба варианта "Яблоко" и "Черника".
Избегайте этого, изменяя свойство ValueList
напрямую...
Option Compare Database
Option Explicit
Private Sub Combobox1_AfterUpdate()
Dim strValueList As String
Select Case Me.Combobox1.Value
Case "Apple"
strValueList = "Sauce;Seeds"
Case "Blueberry"
strValueList = "Pie;Cobbler"
Case Else
MsgBox "What should happen when selection = '" & Me.Combobox1.Value & "'?"
End Select
Me.Combobox2.RowSource = strValueList
End Sub
Примечания:
AfterUpdate
первого комбо, потому что его значение было окончательно определено в этот момент.Option Explicit
как Андре предложил. Не пишите код VBA без него.
Рекомендации по устранению неполадок VBA: установите точку останова (F9), а затем — один шаг (F8)