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 не повторяя его для каждой пары? (добавить цикл?)Паштет
И вам здравствуйте. Циклами не обойдётесь - вы же обрабатываете ComboBox1102_Change - а придётся лезть в классы и перехватывать Сhange для всех комбобоксов Реальный файлик покажите
И вам здравствуйте. Циклами не обойдётесь - вы же обрабатываете ComboBox1102_Change - а придётся лезть в классы и перехватывать Сhange для всех комбобоксов Реальный файлик покажитеbuchlotnik
Сообщение отредактировал buchlotnik - Четверг, 01.06.2017, 15:19
Ничего не поменялось. А как воткнуть в модуль свой код обработки не догоняю. Идея следующая: ComboBox1**2 - это наименование продукции, а ComboBox1**4 номенклатура к этому наименованию. При выборе наименования продукции, должен быть сформирован список только тех номенклатурных номеров, которые бы соответствовали данной продукции. В одном акте может доходить до 12 наименований продукции.
Ничего не поменялось. А как воткнуть в модуль свой код обработки не догоняю. Идея следующая: ComboBox1**2 - это наименование продукции, а ComboBox1**4 номенклатура к этому наименованию. При выборе наименования продукции, должен быть сформирован список только тех номенклатурных номеров, которые бы соответствовали данной продукции. В одном акте может доходить до 12 наименований продукции.Паштет
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о всем комбикам
Цитата
Ничего не поменялось
В смысле? Вот это [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
А если усложнить немного задачу и добавить по такому же принципу заполнение textbox'ов относительно выбора в ComboBox: на странице формы "Выдача продукции" (Page2) в при выборе значений ComboBox2**1 "Наименование" (с листа "ИБ_Выдача" столбца "U") подставлялись соответствующие значения в Textbox2**3 ("В ожидании решения") с листа "ИБ_Выдача" столбца "Т".
ComboBox2**1 заполняются, осталось дело только за TextBox.
Как сам понимал - прописал, но так как это не хотело работать, поставил перед этими строками апостроф.
А если усложнить немного задачу и добавить по такому же принципу заполнение textbox'ов относительно выбора в ComboBox: на странице формы "Выдача продукции" (Page2) в при выборе значений ComboBox2**1 "Наименование" (с листа "ИБ_Выдача" столбца "U") подставлялись соответствующие значения в Textbox2**3 ("В ожидании решения") с листа "ИБ_Выдача" столбца "Т".
ComboBox2**1 заполняются, осталось дело только за TextBox.
Как сам понимал - прописал, но так как это не хотело работать, поставил перед этими строками апостроф.Паштет
Для статичной таблицы подойдет, но она у меня динамическая. Ввиду того, что пока только начинаю работать с VBA, не очень понимаю, как можно на просмотр весь столбец отправить.
Для статичной таблицы подойдет, но она у меня динамическая. Ввиду того, что пока только начинаю работать с VBA, не очень понимаю, как можно на просмотр весь столбец отправить.Паштет
Паштет, Вам нужно что бы отражались данные в текстбоксе в зависимости от выбранных данных в комбиках? А зачем Вам весь столбец просматривать???
Паштет, Вам нужно что бы отражались данные в текстбоксе в зависимости от выбранных данных в комбиках? А зачем Вам весь столбец просматривать???parovoznik
Да, зависимость для текстбокса идет только от комбобокса2**1 ("Наименование"). Столбец надо просматривать, тк количество наименований может меняться.
Да, зависимость для текстбокса идет только от комбобокса2**1 ("Наименование"). Столбец надо просматривать, тк количество наименований может меняться.Паштет