Author |
Topic |
|
maniac
Russia
25 Posts |
Posted - 02/18/2009 : 12:55:18
|
Привет, Visio-маны! Подскажите, пожалуйста, как сделать зависимые поля со списком в UserForm. Ну например, выбираю в поле со списком "Кот", во втором поле со списком появляется "Васька","Леопольд".Выбираю "Собака", появляется "Тузик","Шарик". Благодарю за внимание. Искренне Ваш, Maniac. :) |
|
Tumanov
Russia
1198 Posts |
Posted - 02/18/2009 : 16:42:14
|
Ну, это задача не столько для Visio, сколько для VBA вообще... Обрабатываете событие ComboBox1_Change В зависимости от ComboBox1.Text или ComboBox1.LisIndex (что окажется удобнее) подставляете в ComboBox2 тот или иной список для выбора. Не забыть еще перед этим старый список обнулить, а то он наращиваться будет. |
|
|
maniac
Russia
25 Posts |
Posted - 02/19/2009 : 11:27:17
|
Спасибо, Гуру! |
|
|
maniac
Russia
25 Posts |
Posted - 02/19/2009 : 13:55:50
|
Геннадий, ещё раз спасибо! Всё получилось.Если кому интересно, то прога реализуется так: Создаём UserForm1 с ComboBox1 и ComboBox2, далее так: Dim a(1 To 2), b(1 To 2), c(1 To 2) As String Private Sub ComboBox1_Change() ComboBox2.Clear If ComboBox1.Text = a(1) Then For v = 1 To 2 ComboBox2.AddItem b(v) Next ComboBox2.BoundColumn = 0 ComboBox2.ListIndex = 0 End If
If ComboBox1.Text = a(2) Then For l = 1 To 2 ComboBox2.AddItem c(l) Next ComboBox2.BoundColumn = 0 ComboBox2.ListIndex = 0 End If End Sub Private Sub UserForm_Activate() a(1) = "Кот" a(2) = "Собака" b(1) = "Васька" b(2) = "Леопольд" c(1) = "Тузик" c(2) = "Шарик" For i = 1 To 2 ComboBox1.AddItem a(i) Next ComboBox1.BoundColumn = 0 ComboBox1.ListIndex = 0 End Sub
До новых встреч!
|
|
|
maniac
Russia
25 Posts |
Posted - 02/25/2009 : 10:24:06
|
Доброго! А можно сделать так, чтобы по какому-нибудь условию в Форме переменная списка становилась не возможна для выбора, но видна (серым цветом, например) и в конце списка? Спасибо,Maniac. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 02/25/2009 : 15:45:45
|
Это надо свой комбобокс делать. |
|
|
maniac
Russia
25 Posts |
Posted - 02/26/2009 : 08:00:48
|
Если можно, немного подробнее о своём комбобоксе. Как делать? Где почитать? Какие нибудь примеры? Спасибо! |
|
|
GDK
Russia
90 Posts |
Posted - 02/26/2009 : 10:43:23
|
quote: Originally posted by maniac
Если можно, немного подробнее о своём комбобоксе.
Умучаешься с этим. Где-то встречал тему, в которой автор хотел сделать листбокс под зебру(чтобы цвет фона элементов чередовался). Сделал. С помощью API. Код большой и толстый получился. Лучше, наверное, в такой ситуации следующее: Использовать для хранения не комбобокс, а массив(или лучше объект Dictionary из VBScripting Runtime); Завести в этом массиве служебные переменные для того, чтоб понимать доступен элемент или нет. В комбобоксе только отображать содержимое этого массива. Ну про то как отображать: либо использовать два комбобокса - один для доступных элементов, др.-для недост., либо использовать один комбобокс, но к недоступным элементам приписывать типа "недоступно" (для пользователя). Ловить события комбобокса и если пользователь выбирает недоступный элемент, восстанавливать предыдущее значение комбобокса. Не знаю есть ли комбобоксы с несколькими колонками, но если есть можно ими воспользоваться. |
|
|
GDK
Russia
90 Posts |
Posted - 02/26/2009 : 10:48:07
|
Кстати. В курсе что объявил a() и b() как Variant? |
|
|
maniac
Russia
25 Posts |
Posted - 02/26/2009 : 13:21:34
|
Спасибо за инфо! Я где-то видел комбобокс с несколькими колонками. Про a и b не знал, думал всё Public. Ещё раз спасибо, до новых жертв. Maniac :)) |
|
|
|
Topic |
|
|
|