Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/86: Рейтинг темы: голосов - 86, средняя оценка - 4.97
1 / 1 / 0
Регистрация: 07.05.2012
Сообщений: 17

Связанный выпадающий список через ActiveX

04.06.2012, 10:06. Показов 18706. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня!

Имеются два связанных списка, выбирая значения в одном предлагаются варианты в другом.
Обязательное требование что используем элементы ActiveX выпадающий список.
В первом списке диапазон выбран и все работает, а вот связанный второй не знаю.

Как сделать связь между двумя ComboBox?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2012, 10:06
Ответы с готовыми решениями:

Заполнение выпадающего списка через другой выпадающий список
Срочно нужна помощь. Нужно заполнить выпадающий список данными с листа с помощью другого выпадающего списка. Например: я выбрал какой-либо...

Выпадающий список связанный с БД
Помогите сделать выпадающий список связанный с БД. нужно создать выпадающий список (например: Условие 1, условие 2, условие n). при...

Связанный выпадающий список
кто знает как сделать связанный выпадающий список?

18
200 / 98 / 2
Регистрация: 24.09.2011
Сообщений: 261
04.06.2012, 12:17
Visual Basic
1
2
3
Private Sub ComboBox1_Change()
'заполняем ComboBox2 (через ComboBox2.Add можно) в зависимости от значения ComboBox1.Value
End Sub
0
1 / 1 / 0
Регистрация: 07.05.2012
Сообщений: 17
05.06.2012, 07:17  [ТС]
спасибо конечно, но такой вариант мне не подходит.
0
200 / 98 / 2
Регистрация: 24.09.2011
Сообщений: 261
05.06.2012, 09:15
Хозяин - барин
А можно любопытно, почему?
1
1 / 1 / 0
Регистрация: 07.05.2012
Сообщений: 17
05.06.2012, 09:49  [ТС]
нашла способ полегче, замутила все через диспетчер имен используя функцию СМЕЩ() и отлично все работает
1
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
05.06.2012, 11:26
Забавно. Вместо предложенного вам нормального (согласно логике построения выпадающих списков в Excel) решения вы выбрали решение методом "левой рукой через правое ухо" и назвали его "способ полегче".
0
1 / 1 / 0
Регистрация: 07.05.2012
Сообщений: 17
05.06.2012, 11:36  [ТС]
значит у меня иные понятия полегче
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
05.06.2012, 12:13
Цитата Сообщение от ElenaTELE Посмотреть сообщение
значит у меня иные понятия полегче
Опыт показывает, что нередко способы "левой рукой через правое ухо", ситуационно выглядящие более легкими, в итоге приводят к такому геморрою, что лучше сразу делать правильно.

Впрочем, возможно в данном конкретном случае вам так действительно проще, не настаиваю.
0
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 4
22.08.2012, 13:46
Приветствую. Новую тему создавать не стал т.к. таких уже штуки 2. Моя задача схожа поэтому пишу здесь.

Работаем Excel

Задача:
Мне нужно создать каскад из 3х-4х ComboBox. В зависимости от выбора одного, список в последующем меняется.

Что смог:
взял код: Скажу сразу что ЭТО скопированно от от CЮДА
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Sub ComboBox1_Change()
 
    Worksheets("Ëèñò2").ComboBox1.ListFillRange = "Ëèñò1!A1:A4"
       If Worksheets("Ëèñò2").ComboBox1.ListIndex = 0 Then
       Worksheets("Ëèñò2").ComboBox2.ListFillRange = "Ëèñò2!B1:B9"
    ElseIf Worksheets("Ëèñò2").ComboBox1.ListIndex = 1 Then
        Worksheets("Ëèñò2").ComboBox2.ListFillRange = "Ëèñò2!С1:С7"
    ElseIf Worksheets("Ëèñò2").ComboBox1.ListIndex = 2 Then
        Worksheets("Ëèñò2").ComboBox2.ListFillRange = "Ëèñò2!D1:D4"
    ElseIf Worksheets("Ëèñò2").ComboBox1.ListIndex = 3 Then
        Worksheets("Ëèñò2").ComboBox2.ListFillRange = "Ëèñò2!E1:B10"
    End If
 
Worksheets("Ëèñò2").ComboBox2.ListIndex = -1
 
End Sub
немного адаптировал для Себя.

В принципе схема работает.но не годится

Что нужно:

1. при изменении в Combobox1, Combobox2 не меняет списки без нажатия кнопки RUN Sub/userform(F5) во вкладке VBA. после запуска программы списки в Combobox2 меняются.

2. Как в дальнейшем завязать последующие списки? т.к. если действовать аналогично КОДУ(см.выше), вне зависимости от того что в Combobox2, в Combobox3 будут подгружаться списки в зависимости от положения элементов списка 0,1,2,3 и т.д.

3.для начала можно все это организовать с базой информации на др.листе. Но хотелось бы ВСЮ информацию прописать в Коде, если это возможно.
0
200 / 98 / 2
Регистрация: 24.09.2011
Сообщений: 261
22.08.2012, 20:43
1. F5 в редакторе запускает программу на выполнение. Только после этого она выполняется и меняет содержимое ваших CheckBox'ов. Все правильно - что не так?

2.
Visual Basic
1
2
3
4
5
6
7
8
private sub ComboBox2_change()
   select case ComboBox2.Value
      case "ololo"
         ComboBox3.ListFillRange = "Лист3!A1:A4"
      case "pish-pish"
         ComboBox3.ListFillRange = "Лист3!B1:B6"
   end select
end sub
наверное так?

3.
Visual Basic
1
2
3
4
    Dim v
    For Each v In Array("ololo", "kudah-tah-tah", "onotole")
        ComboBox1.AddItem v
    Next v
Добавлено через 3 минуты
Кстати, ни я, ни редактор кода vba не знаем такого свойства как ListFillRange.
Вместо него, наверное, надо использовать свойство RowSource.
1
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 4
23.08.2012, 15:51
sulfur, Спасибо. Но позже нужно будет уточнить кое-какие моменты.
0
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 4
24.08.2012, 11:04
Цитата Сообщение от sulfur Посмотреть сообщение
1. F5 в редакторе запускает программу на выполнение. Только после этого она выполняется и меняет содержимое ваших CheckBox'ов. Все правильно - что не так?
понятно что код работает после его запуска. Возможно ли сделать запуск кода автоматически, при открывании книги?

Цитата Сообщение от sulfur Посмотреть сообщение
Visual Basic
1
2
3
4
    Dim v
    For Each v In Array("ololo", "kudah-tah-tah", "onotole")
        ComboBox1.AddItem v
    Next v
Данное заполнение массива работает, проблемм нет.

Цитата Сообщение от sulfur Посмотреть сообщение
Кстати, ни я, ни редактор кода vba не знаем такого свойства как ListFillRange.
Вместо него, наверное, надо использовать свойство RowSource.
А вот в моем VBA иначесмотрите прикрепленный файл, это скрин со свойств в VBA)
Поэтому не могу разобраться как правильно сделать ссылку на Combobox2
Код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private sub ComboBox1_change()
  Dim a
  For Each a In Array("Элеткротовары", "краски", "сухие смеси")
     ComboBox1.AddItem a
  Next a
 
  select case ComboBox1.Value
     case "Электротовары"
        ComboBox2.(какое свойство?)  = (Как прописать новые списки для "Электротовары")
     case "краски"
        ComboBox2.(какое свойство?)  = (Как прописать новые списки для "краски")
     case "сухие смеси"
        ComboBox2.(какое свойство?)  = (Как прописать новые списки для "сухие смеси")
 
    end select
end sub
Пусть для
"Электротовары" : Выключатели, розетки
"краски" : акриловые, масляные
"сухие смеси" : цементосодержащие, гипсосодержащие

Как правильно прописать сброс списка в Combobox, т.к. при повторном выборе из списка он вновь пополняется.
Миниатюры
Связанный выпадающий список через ActiveX  
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
24.08.2012, 12:21
Цитата Сообщение от Чегет Посмотреть сообщение
Как правильно прописать сброс списка в Combobox
Visual Basic
1
ComboBox2.Clear
Но здесь этого не надо - используем св-во List!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub ComboBox1_Change()
'ComboBox2.Clear
Select Case ComboBox1
Case "Элеткротовары": ComboBox2.List = Array("Выключатели", "розетки")
Case "Краски": ComboBox2.List = Array("акриловые", "масляные")
Case "Сухие смеси": ComboBox2.List = Array("цементосодержащие", "гипсосодержащие")
End Select
End Sub
 
Private Sub UserForm_Initialize()
ComboBox1.List = Array("Элеткротовары", "Краски", "Сухие смеси")
End Sub
Добавлено через 23 минуты
Цитата Сообщение от Чегет Посмотреть сообщение
Возможно ли сделать запуск кода автоматически, при открывании книги?
В модуль "ЭтаКнига" вставь следующий код -
Visual Basic
1
2
3
Private Sub Workbook_Open()
UserForm1.Show
End Sub
2
200 / 98 / 2
Регистрация: 24.09.2011
Сообщений: 261
27.08.2012, 14:53
Чегет, Апострофф уже вроде ответил, а я только хотел бы разобраться с ListFillRange. У меня MS Excel 2007 и в нем такого свойства у ComboBox нету. А у вас?
Можете скинуть свой рабочий пример?
0
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 4
28.08.2012, 19:15
sulfur, ListFillRange вообще не использовался.
сделано по примеру Апострофф.


Апострофф, Спасибо за совет.

А может ли кто-нибудь подсказать как создать ДРЕВО на базе этой книги(см. ниже) по типу принт.скрина?
Максимальное увеличение = 3, как на рис.1.2.
Миниатюры
Связанный выпадающий список через ActiveX   Связанный выпадающий список через ActiveX  
Вложения
Тип файла: rar Книга1.rar (24.5 Кб, 42 просмотров)
0
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 2
01.02.2016, 17:07
Здравствуйте!
Пытаюсь сделать два связанных списка. При этом диапазоны для обоих комбобоксов подразумеваются динамическими.
Код в принципе получился, НО он работает только если списки значений для обоих комбобоксов находятся на том же листе, что и комбобоксы. Если же списки значений лежат на другом листе, то возникает ошибка. При этом, код также работает, если только первый комбобокс заполняется с другого листа. Второй с того же листа заполняться, как я понял, не хочет. Помогите разобраться.

Рабочий код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub combobox21_change()
catnum = WorksheetFunction.CountA(Sheets(2).Rows(1))
Sheets(2).ComboBox21.List = Sheets(3).Range("a1:a" & catnum).Value
ComboBox22.clear
For i = 15 To catnum + 15
itemnum = WorksheetFunction.CountA(Sheets(2).Columns(i))
If ComboBox21.Value = Me.Cells(1, i) Then
ComboBox22.List = Range(Cells(2, i), Cells(itemnum, i)).Value
Exit For
End If
Next
End Sub

Для такого кода возникает ошибка Run-time error '1004' Application-defined or object-defined error
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub combobox21_change()
catnum = WorksheetFunction.CountA(Sheets(2).Rows(1))
Sheets(2).ComboBox21.List = Sheets(3).Range("a1:a" & catnum).Value
ComboBox22.clear
For i = 3 To catnum + 3
itemnum = WorksheetFunction.CountA(Sheets(3).Columns(i))
If ComboBox21.Value = Sheets(3).Cells(1, i) Then
ComboBox22.List = Sheets(3).Range(Cells(2, i), Cells(itemnum, i)).Value
Exit For
End If
Next
End Sub
Объясните пожалуйста в чем ошибка?
0
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 2
01.02.2016, 17:15
Вот сам файл.
Вложения
Тип файла: xls vba1.xls (66.5 Кб, 81 просмотров)
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
01.02.2016, 17:20
Kinest22,
Visual Basic
1
ComboBox22.List = Sheets(3).Range(sheets(3).Cells(2, i), sheets(3).Cells(itemnum, i)).Value
1
 Аватар для yutrans
142 / 125 / 50
Регистрация: 10.11.2011
Сообщений: 622
01.02.2016, 18:16
Чегет, добрый день у меня есть вариант только выпадающий список на форме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2016, 18:16
Помогаю со студенческими работами здесь

Связанный выпадающий (каскадный) список
Здравствуйте! Не смог найти рабочий пример файла MS Excel с выпадающим списком под свою задачу. Нужно, чтобы человек выбрал в поле C11...

ActiveX выпадающий список
Ребята, всем привет! Прошу помочь в решении такой задачи: - Есть лист с таблицей, на этом же листе находится выпадающий список...

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

Выпадающий список через кнопку
доброго времени суток, знатоки. вопрос такой. возможно ли каким-нибудь способом реализовать выпадающий список на кнопку формы? тоесть,...

Выпадающий список через ADOQuery
Как сделать выпадающий список для поля фильтра "Вид ПО", через компонент ADOQuery, чтобы данные для выпадающего списка брались из уже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru