Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Повторяющиеся зависимые ComboBox - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Повторяющиеся зависимые ComboBox (Макросы/Sub)
Повторяющиеся зависимые ComboBox
Паштет Дата: Четверг, 01.06.2017, 14:48 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Есть код:
[vba]
Код
Private Sub ComboBox1102_Change()
Dim b()
    Dim i&
    b = Sheets("Лист1").UsedRange.Value
    With CreateObject("Scripting.Dictionary")
        For i = 3 To UBound(b)
            If b(i, 5) = ComboBox1102 And b(i, 7) <> ComboBox1102 Then
                .Item(b(i, 7)) = ""
            End If
        Next
        ComboBox1104.Clear
        ComboBox1104.List = .Keys
    End With
End Sub

Private Sub UserForm_Initialize()
Dim a2()
    Dim i3&
    b = Sheets("Лист1").UsedRange.Value
    With CreateObject("Scripting.Dictionary")
        For i3 = 3 To UBound(b)
            If b(i3, 5) <> "" And b(i3, 5) <> "-" Then
                .Item(b(i3, 5)) = ""
            End If
        Next
        ComboBox1102.List = .Keys
        ComboBox1104.List = .Keys
    End With

End Sub
[/vba]
Можно ли его записать так, чтобы он работал и на другие пары ComboBox:
ComboBox1112 и ComboBox1114
ComboBox1122 и ComboBox1124
...
ComboBox1212 и ComboBox1214
не повторяя его для каждой пары? (добавить цикл?)
 
Ответить
СообщениеЕсть код:
[vba]
Код
Private Sub ComboBox1102_Change()
Dim b()
    Dim i&
    b = Sheets("Лист1").UsedRange.Value
    With CreateObject("Scripting.Dictionary")
        For i = 3 To UBound(b)
            If b(i, 5) = ComboBox1102 And b(i, 7) <> ComboBox1102 Then
                .Item(b(i, 7)) = ""
            End If
        Next
        ComboBox1104.Clear
        ComboBox1104.List = .Keys
    End With
End Sub

Private Sub UserForm_Initialize()
Dim a2()
    Dim i3&
    b = Sheets("Лист1").UsedRange.Value
    With CreateObject("Scripting.Dictionary")
        For i3 = 3 To UBound(b)
            If b(i3, 5) <> "" And b(i3, 5) <> "-" Then
                .Item(b(i3, 5)) = ""
            End If
        Next
        ComboBox1102.List = .Keys
        ComboBox1104.List = .Keys
    End With

End Sub
[/vba]
Можно ли его записать так, чтобы он работал и на другие пары ComboBox:
ComboBox1112 и ComboBox1114
ComboBox1122 и ComboBox1124
...
ComboBox1212 и ComboBox1214
не повторяя его для каждой пары? (добавить цикл?)

Автор - Паштет
Дата добавления - 01.06.2017 в 14:48
parovoznik Дата: Четверг, 01.06.2017, 14:52 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
Паштет, надо добавить файл примерчик. :D
 
Ответить
СообщениеПаштет, надо добавить файл примерчик. :D

Автор - parovoznik
Дата добавления - 01.06.2017 в 14:52
buchlotnik Дата: Четверг, 01.06.2017, 15:02 | Сообщение № 3
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
И вам здравствуйте.
Циклами не обойдётесь - вы же обрабатываете ComboBox1102_Change - а придётся лезть в классы и перехватывать Сhange для всех комбобоксов
Реальный файлик покажите


Сообщение отредактировал buchlotnik - Четверг, 01.06.2017, 15:19
 
Ответить
СообщениеИ вам здравствуйте.
Циклами не обойдётесь - вы же обрабатываете ComboBox1102_Change - а придётся лезть в классы и перехватывать Сhange для всех комбобоксов
Реальный файлик покажите

Автор - buchlotnik
Дата добавления - 01.06.2017 в 15:02
Паштет Дата: Четверг, 01.06.2017, 16:09 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Реальный файлик.
Работы ведутся только на Page1


Сообщение отредактировал Паштет - Четверг, 01.06.2017, 16:11
 
Ответить
СообщениеРеальный файлик.
Работы ведутся только на Page1

Автор - Паштет
Дата добавления - 01.06.2017 в 16:09
buchlotnik Дата: Четверг, 01.06.2017, 16:17 | Сообщение № 5
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Паштет, не прикрепили - объём ограничен 100 кб
 
Ответить
СообщениеПаштет, не прикрепили - объём ограничен 100 кб

Автор - buchlotnik
Дата добавления - 01.06.2017 в 16:17
Паштет Дата: Четверг, 01.06.2017, 16:33 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Прошу прощения
К сообщению приложен файл: 2-.xlsm (43.9 Kb)
 
Ответить
СообщениеПрошу прощения

Автор - Паштет
Дата добавления - 01.06.2017 в 16:33
buchlotnik Дата: Четверг, 01.06.2017, 17:12 | Сообщение № 7
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
модуль воткнул - как оно всё пахать должно - не разбирался - тестируйте
К сообщению приложен файл: 354e67.xlsm (59.1 Kb)


Сообщение отредактировал buchlotnik - Четверг, 01.06.2017, 22:35
 
Ответить
Сообщениемодуль воткнул - как оно всё пахать должно - не разбирался - тестируйте

Автор - buchlotnik
Дата добавления - 01.06.2017 в 17:12
Паштет Дата: Пятница, 02.06.2017, 10:25 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Ничего не поменялось. А как воткнуть в модуль свой код обработки не догоняю.
Идея следующая: ComboBox1**2 - это наименование продукции, а ComboBox1**4 номенклатура к этому наименованию. При выборе наименования продукции, должен быть сформирован список только тех номенклатурных номеров, которые бы соответствовали данной продукции. В одном акте может доходить до 12 наименований продукции.
 
Ответить
СообщениеНичего не поменялось. А как воткнуть в модуль свой код обработки не догоняю.
Идея следующая: ComboBox1**2 - это наименование продукции, а ComboBox1**4 номенклатура к этому наименованию. При выборе наименования продукции, должен быть сформирован список только тех номенклатурных номеров, которые бы соответствовали данной продукции. В одном акте может доходить до 12 наименований продукции.

Автор - Паштет
Дата добавления - 02.06.2017 в 10:25
buchlotnik Дата: Пятница, 02.06.2017, 11:00 | Сообщение № 9
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
Ничего не поменялось
В смысле? Вот это [vba]
Код
Private Sub CmBx_Change()

    Dim b()
    Dim i&
    b = Sheets("ИБ_Прием").UsedRange.Value
    With CreateObject("Scripting.Dictionary")
        For i = 3 To UBound(b)
            If b(i, 5) = CmBx And b(i, 7) <> CmBx Then
                .Item(b(i, 7)) = ""
            End If
        Next
        
        Dim ncmbx$
        ncmbx = Left(CmBx.Name, Len(CmBx.Name) - 1) & 4
        UserForm1.Controls(ncmbx).Clear
        UserForm1.Controls(ncmbx).List = .Keys
    End With
    
End Sub
[/vba] написано с вашего кода для ComboBox1102_Change

UPD - добавил цикл добавления .Listо всем комбикам
К сообщению приложен файл: 3630933.xlsm (52.6 Kb)


Сообщение отредактировал buchlotnik - Пятница, 02.06.2017, 11:38
 
Ответить
Сообщение
Цитата
Ничего не поменялось
В смысле? Вот это [vba]
Код
Private Sub CmBx_Change()

    Dim b()
    Dim i&
    b = Sheets("ИБ_Прием").UsedRange.Value
    With CreateObject("Scripting.Dictionary")
        For i = 3 To UBound(b)
            If b(i, 5) = CmBx And b(i, 7) <> CmBx Then
                .Item(b(i, 7)) = ""
            End If
        Next
        
        Dim ncmbx$
        ncmbx = Left(CmBx.Name, Len(CmBx.Name) - 1) & 4
        UserForm1.Controls(ncmbx).Clear
        UserForm1.Controls(ncmbx).List = .Keys
    End With
    
End Sub
[/vba] написано с вашего кода для ComboBox1102_Change

UPD - добавил цикл добавления .Listо всем комбикам

Автор - buchlotnik
Дата добавления - 02.06.2017 в 11:00
Паштет Дата: Пятница, 02.06.2017, 13:12 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Спасибо. Все прекрасно работает. То что надо.
 
Ответить
СообщениеСпасибо. Все прекрасно работает. То что надо.

Автор - Паштет
Дата добавления - 02.06.2017 в 13:12
Паштет Дата: Вторник, 06.06.2017, 14:42 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
А если усложнить немного задачу и добавить по такому же принципу заполнение textbox'ов относительно выбора в ComboBox:
на странице формы "Выдача продукции" (Page2) в при выборе значений ComboBox2**1 "Наименование" (с листа "ИБ_Выдача" столбца "U") подставлялись соответствующие значения в Textbox2**3 ("В ожидании решения") с листа "ИБ_Выдача" столбца "Т".

ComboBox2**1 заполняются, осталось дело только за TextBox.

Как сам понимал - прописал, но так как это не хотело работать, поставил перед этими строками апостроф.
К сообщению приложен файл: 2-.rar (73.1 Kb)
 
Ответить
СообщениеА если усложнить немного задачу и добавить по такому же принципу заполнение textbox'ов относительно выбора в ComboBox:
на странице формы "Выдача продукции" (Page2) в при выборе значений ComboBox2**1 "Наименование" (с листа "ИБ_Выдача" столбца "U") подставлялись соответствующие значения в Textbox2**3 ("В ожидании решения") с листа "ИБ_Выдача" столбца "Т".

ComboBox2**1 заполняются, осталось дело только за TextBox.

Как сам понимал - прописал, но так как это не хотело работать, поставил перед этими строками апостроф.

Автор - Паштет
Дата добавления - 06.06.2017 в 14:42
parovoznik Дата: Вторник, 06.06.2017, 17:41 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
Паштет, посмотрите набросал пример свой. Может подойдет.
К сообщению приложен файл: 9836143.xlsm (24.0 Kb)
 
Ответить
СообщениеПаштет, посмотрите набросал пример свой. Может подойдет.

Автор - parovoznik
Дата добавления - 06.06.2017 в 17:41
Паштет Дата: Среда, 07.06.2017, 14:06 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Для статичной таблицы подойдет, но она у меня динамическая. Ввиду того, что пока только начинаю работать с VBA, не очень понимаю, как можно на просмотр весь столбец отправить.
 
Ответить
СообщениеДля статичной таблицы подойдет, но она у меня динамическая. Ввиду того, что пока только начинаю работать с VBA, не очень понимаю, как можно на просмотр весь столбец отправить.

Автор - Паштет
Дата добавления - 07.06.2017 в 14:06
parovoznik Дата: Среда, 07.06.2017, 14:43 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
Паштет, Вам нужно что бы отражались данные в текстбоксе в зависимости от выбранных данных в комбиках? А зачем Вам весь столбец просматривать???
 
Ответить
СообщениеПаштет, Вам нужно что бы отражались данные в текстбоксе в зависимости от выбранных данных в комбиках? А зачем Вам весь столбец просматривать???

Автор - parovoznik
Дата добавления - 07.06.2017 в 14:43
Паштет Дата: Среда, 07.06.2017, 22:04 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Да, зависимость для текстбокса идет только от комбобокса2**1 ("Наименование"). Столбец надо просматривать, тк количество наименований может меняться.
 
Ответить
СообщениеДа, зависимость для текстбокса идет только от комбобокса2**1 ("Наименование"). Столбец надо просматривать, тк количество наименований может меняться.

Автор - Паштет
Дата добавления - 07.06.2017 в 22:04
parovoznik Дата: Четверг, 08.06.2017, 11:01 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
Паштет, если нужен просмотр столбца ,то используйте ListBox yes
 
Ответить
СообщениеПаштет, если нужен просмотр столбца ,то используйте ListBox yes

Автор - parovoznik
Дата добавления - 08.06.2017 в 11:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Повторяющиеся зависимые ComboBox (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!