3 комбинированных списка имеют одинаковые предметы (aa, bb, cc и dd). Если я выберу «aa» в одном из комбо-боксов, как сделать так, чтобы он не появлялся снова в двух других комбоксах? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть 3 комбинированных списка, а именно: combobox1, combobox2 и combobox3 с одинаковыми элементами. Это «aa», «bb», «cc» и «dd».

ТАКЖЕ, эти списки доступны в пользовательской форме.

Итак, у меня есть 3 поля со списком в USERFORM , если я выберу «aa» в выпадающем списке 1, как я могу сделать так, чтобы «aa» не появлялся в двух других выпадающих списках, чтобы он не был повторно выбран снова.

Это как если я выберу «aa» в combobox1 и «bb» в combobox2 оставшиеся элементы, доступные в combobox3, должны быть «cc» и «dd».

Но я не знаю, как это сделать. Можете ли вы помочь мне с кодами? Большое спасибо.

Ps. Я использую Microsoft VBA в Excel

Pps. Я не профессионал.

1 Ответ

0 голосов
/ 27 апреля 2020

Вот базовый 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...