2011-12-18 3 views
0

Код показывает три ComboBox в UserForm. Combobox2 выбирает четыре значения 1, 2, 3, 4 из листа («Данные») и Combobox3 выбирает 6 значений (A, B, C, D, E, F) из того же листа. Что делать, если я хочу управлять Combobox3 после того, как значение выбрано в Combobox2, например, если я выбираю 1, я хочу, чтобы только A, B, C должны были быть в Combobox3, или если я выберу 2, тогда будет найдено только D, E в Combobox3 и т. д.?Как я могу управлять ComboBox за другим?

Заранее благодарим за любые предложения!

Private Sub RapportFix_Initialize() 
Dim ComboItems As Variant, i As Integer 
Dim val As String 

    With RapportFix.ComboBox2 'Provtyp 
    .Clear ' remove existing entries from the listbox 
    ComboItems = Worksheets("Indata").Range("C5:C8").Value 
    ComboItems = Application.WorksheetFunction.Transpose(ComboItems) 
    ' convert values to a vertical array 
    For i = 1 To UBound(ComboItems) 
     .AddItem ComboItems(i) ' populate the combobox 
    Next i 
    .ListIndex = -1 ' no items selected, set to 0 to select the first item 
End With 
With RapportFix.ComboBox3 'Kursplan 
    .Clear ' remove existing entries from the listbox 
    'Set sKursplanemoment = ComboBox3.Value 
    ComboItems = Worksheets("Indata").Range("M5:M10").Value 
    ComboItems = Application.WorksheetFunction.Transpose(ComboItems) 
    ' convert values to a vertical array 
    For i = 1 To UBound(ComboItems) 
     .AddItem ComboItems(i) ' populate the combobox 
    Next i 
    .ListIndex = -1 ' no items selected, set to 0 to select the first item 
End With 

With RapportFix.ComboBox4 'Annat arbete 
    .Clear ' remove existing entries from the listbox 
    ComboItems = Worksheets("Indata").Range("E5:E8").Value 
    ComboItems = Application.WorksheetFunction.Transpose(ComboItems) 
    ' convert values to a vertical array 
    For i = 1 To UBound(ComboItems) 
     .AddItem ComboItems(i) ' populate the combobox 
    Next i 
    .ListIndex = -1 ' no items selected, set to 0 to select the first item 
End With 
RapportFix.Show 
End Sub 
+0

ERM , измените другое поле со списком в ответ на событие изменения для исходного поля со списком? Я понятия не имею, в чем проблема, с которой вы сталкиваетесь. –

+0

Привет, Коди! Да, это то, чего я хочу. Поэтому содержимое Combobox3 зависит от того, что вы выбираете в Combobox2. Спасибо –

ответ

1

У каждого пользовательского элемента управления есть ряд связанных с ним событий. Событие изменения предложил Коди особенно легко найти, так как все, что вам нужно сделать, это правой кнопкой мыши элемент управления в режиме конструктора и выберите «View Code», вспомогательный контур затем будет заполнен.

enter image description here

Как вы можете видеть выше, есть два раскрывающихся списка над кодовой страницей, в которых перечислены доступные элементы управления и объекты, а также перечислены события. Выберите элемент управления и событие, чтобы получить субтитры для этого события.

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

Private Sub ComboBox2_Change() 
    ''Populate combo 3 
End Sub 

Единственное отличие состоит вам нужно проверить, что список содержит только те элементы, которые должны появиться для каждого значения контрольных комбо. Я был бы склонен делать это с помощью списка на листе, который я мог бы легко контролировать:

Item2 Item3 
1  a 
1  b 
2  d 
2  c 
3  a 
3  e 

Однако, это не представляется возможным для вас, так что вы можете использовать Select Case

Private Sub ComboBox2_Change() 
    Select Case ComboBox2 
     Case "1", "2", "3" 
      ''Add items x,y,z to combobox3 
     Case "a", "b", "c" 
      ''Add items m,n,o to combobox3 
     Case Else 
      ''Whatever 
    End Select 
End Sub 
+0

Жаль Remou! Я новичок в VB, не могли бы вы объяснить, где я должен изменить свой код выше и как? Должен ли я помещать что-то в код для UserForm? Thnaks –

Смежные вопросы