Вот базовый c пример того, как вы можете достичь того, что вы ищете. Вам нужно будет изменить код для работы в вашем собственном проекте .
Это предполагает, что пользователь будет делать выбор из ComboBox в указанном порядке c каждый раз. Например, это сначала будет работать для выбора значения из ComboBox1
, а затем предоставляет список для ComboBox2
, но не будет работать (в его текущей форме) для удаления выбора ComboBox2
из ComboBox1
список. Это может быть изменено, чтобы сделать это, так что не стесняйтесь делать это в случае необходимости.
Вы можете записать свой список на рабочий лист в любом месте по вашему желанию - обычно это полезно делать в скрытом столбце или на скрытом вспомогательном листе. В этом примере значения от «AA» до «GG» находятся в ячейках P6
- P12
в Sheet2
рабочей книги.
Код циклически перебирает ваш диапазон, чтобы добавить элементы к ComboBox
1 на 1, если значение равно = предыдущему выбору ComboBox
, пропустите его, в противном случае добавьте значение к ComboBox
.
Private Sub UserForm_Initialize()
'This Sub populates the first combobox with all values in the list
Dim TargetCell As Range
Dim ListRange As Range
With ThisWorkbook.Sheets("Sheet2")
Set ListRange = .Range("P6:P12")
For Each TargetCell In ListRange
Me.ComboBox1.AddItem TargetCell.Value
Next TargetCell
End With
End Sub
'__________________________________________________________________________________
Private Sub ComboBox1_Change()
'This Sub is similar to above, but has an If statement to check if the value on the sheet_
'is the same as the selected value in the previous combobox1. If it is it's ignored_
'otherwise Combobox2 has the value added.
Dim TargetCell As Range
Dim ListRange As Range
With ThisWorkbook.Sheets("Sheet2")
Set ListRange = .Range("P6:P12")
For Each TargetCell In ListRange
If TargetCell.Value = Me.ComboBox1.Value Then
'Skip
Else
Me.ComboBox2.AddItem TargetCell.Value
End If
Next TargetCell
End With
End Sub