Здравствуйте. Ребята пытался сам, но получается сервелат, в сети в основном демонстрирую примеры построчной зависимости… Помогите создать зависимость списков динамической таблицы, где при выборе из списка нужного заголовка в Комбобоксе3, необходимо загрузить в Комбобокс4 список, соответствующий выбранному заголовку. В тестовом варианте уже прописаны некоторые глобальные переменные, если они необходимы и работает загрузка данными Комбобокса3.
Здравствуйте. Ребята пытался сам, но получается сервелат, в сети в основном демонстрирую примеры построчной зависимости… Помогите создать зависимость списков динамической таблицы, где при выборе из списка нужного заголовка в Комбобоксе3, необходимо загрузить в Комбобокс4 список, соответствующий выбранному заголовку. В тестовом варианте уже прописаны некоторые глобальные переменные, если они необходимы и работает загрузка данными Комбобокса3.Сергей13
Private Sub ComboBox3_Change() ComboBox4.List = Range("tabl_group").ListObject.ListColumns(ComboBox3.Value).DataBodyRange.Value 'Необходимые глобальные переменные для написания кода, зависимого списка, находятся в модуле "sortirovka" End Sub
[/vba]
[vba]
Код
Private Sub ComboBox3_Change() ComboBox4.List = Range("tabl_group").ListObject.ListColumns(ComboBox3.Value).DataBodyRange.Value 'Необходимые глобальные переменные для написания кода, зависимого списка, находятся в модуле "sortirovka" End Sub
RAN, Код работает если нет каких-либо неких факторов… Например если в таблице меньше двух строк, то на момент выбора в комбобоксе3 выдает ошибку. Для корректной работы необходимо чтобы таблица была растянута на несколько строк, не меньше двух. Еще момент есть код который очищает все поля кнопкой [vba]
Код
Sub AddData() FormLogbook.ComboBox3.Value = "" 'Очистка поля End Sub
[/vba] при очищение поля ComboBox3 выдается ошибка на строку кода [vba]
[/vba] Можно ли эти два вышеописанных момента подкорректировать?
RAN, Код работает если нет каких-либо неких факторов… Например если в таблице меньше двух строк, то на момент выбора в комбобоксе3 выдает ошибку. Для корректной работы необходимо чтобы таблица была растянута на несколько строк, не меньше двух. Еще момент есть код который очищает все поля кнопкой [vba]
Код
Sub AddData() FormLogbook.ComboBox3.Value = "" 'Очистка поля End Sub
[/vba] при очищение поля ComboBox3 выдается ошибка на строку кода [vba]
Private Sub ComboBox3_Change() On Error Resume Next With Intersect(Range("tabl_group[[#all]," & ComboBox3 & "]").SpecialCells(2, 23), [tabl_group[#data]]) Me.ComboBox4.Clear With .Areas(1) Me.ComboBox4.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With End Sub
Private Sub ComboBox3_Change() On Error Resume Next With Intersect(Range("tabl_group[[#all]," & ComboBox3 & "]").SpecialCells(2, 23), [tabl_group[#data]]) Me.ComboBox4.Clear With .Areas(1) Me.ComboBox4.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With End Sub
krosav4ig, В тестовом варианте срабатывает, а в рабочем никак... Пришлось повозиться, все полностью удалять, доводя рабочий вариант до тестового, пытаясь найти помеху, которая не дает загрузить список и только тогда, когда создал заголовки как в тестовом, загрузка произошла. Заголовки влияют на загрузку… Почему так?
Посмотрите тестовый вариант. Не срабатывает на второй и третий список.
krosav4ig, В тестовом варианте срабатывает, а в рабочем никак... Пришлось повозиться, все полностью удалять, доводя рабочий вариант до тестового, пытаясь найти помеху, которая не дает загрузить список и только тогда, когда создал заголовки как в тестовом, загрузка произошла. Заголовки влияют на загрузку… Почему так?
Посмотрите тестовый вариант. Не срабатывает на второй и третий список.Сергей13
Private Sub ComboBox3_Change() On Error Resume Next With Intersect(Range("tabl_group[[#all],[" & ComboBox3 & "]]").SpecialCells(2, 23), [tabl_group[#data]]) Me.ComboBox4.Clear With .Areas(1) Me.ComboBox4.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With End Sub
[/vba]
скобочек не хватило [vba]
Код
Private Sub ComboBox3_Change() On Error Resume Next With Intersect(Range("tabl_group[[#all],[" & ComboBox3 & "]]").SpecialCells(2, 23), [tabl_group[#data]]) Me.ComboBox4.Clear With .Areas(1) Me.ComboBox4.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With End Sub
krosav4ig, Сейчас вроде нормально. Я уже все… Есть еще нюанс не связанный с ошибкой, не знаю сам справлюсь… Завтра полностью пробью сообщу. Спок. Ночи!
krosav4ig, Сейчас вроде нормально. Я уже все… Есть еще нюанс не связанный с ошибкой, не знаю сам справлюсь… Завтра полностью пробью сообщу. Спок. Ночи!Сергей13
Сообщение отредактировал Сергей13 - Воскресенье, 10.03.2019, 04:01
krosav4ig, Здравствуйте! Приветствую всех! Код работает и очистка кнопкой происходит корректно, короче пока сбоев не обнаружил. Мне просто надо было такой-же код установить для двух других таблиц и при выборе заголовка в основном комбобоксе, в двух других отображать разные списки. А так как заголовки в двух таблица идентичны, за исключением что в одной из них в конце заголовков стоят точки «.», то в данных строках кода необходимо было вписать разные имена таблиц а в одном из кодов приклеить точку.
With Intersect(Range("tabl_section[[#all],[" & FormLogbook.ComboBox5 & "]]").SpecialCells(2, 23), [tabl_section[#data]]) With Intersect(Range("tabl_name[[#all],[" & FormLogbook.ComboBox5 & "." & "]]").SpecialCells(2, 23), [tabl_name[#data]])
В итоге при выборе заголовка в основном комбобоксе в двух других загружаются разные списки, но как-бы привязанные к одному заголовку.. Не знаю корректен ли данный вариант… [vba]
Код
Sub ListSectionName() 'Загрузка списка таблицы tabl_section в ComboBox6 и таблицы tabl_name в ComboBox7 'Загрузка списка таблицы tabl_section в ComboBox6 On Error Resume Next With Intersect(Range("tabl_section[[#all],[" & FormLogbook.ComboBox5 & "]]").SpecialCells(2, 23), [tabl_section[#data]]) FormLogbook.ComboBox6.Clear With .Areas(1) FormLogbook.ComboBox6.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With
'Загрузка списка таблицы tabl_name в ComboBox7 On Error Resume Next With Intersect(Range("tabl_name[[#all],[" & FormLogbook.ComboBox5 & "." & "]]").SpecialCells(2, 23), [tabl_name[#data]]) FormLogbook.ComboBox7.Clear With .Areas(1) FormLogbook.ComboBox7.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With End Sub
[/vba] [vba]
Код
Private Sub ComboBox5_Change() Call ListSectionName 'Загрузка списка таблицы tabl_section в ComboBox6 и таблицы tabl_name в ComboBox7 End Sub
[/vba]
krosav4ig, Здравствуйте! Приветствую всех! Код работает и очистка кнопкой происходит корректно, короче пока сбоев не обнаружил. Мне просто надо было такой-же код установить для двух других таблиц и при выборе заголовка в основном комбобоксе, в двух других отображать разные списки. А так как заголовки в двух таблица идентичны, за исключением что в одной из них в конце заголовков стоят точки «.», то в данных строках кода необходимо было вписать разные имена таблиц а в одном из кодов приклеить точку.
With Intersect(Range("tabl_section[[#all],[" & FormLogbook.ComboBox5 & "]]").SpecialCells(2, 23), [tabl_section[#data]]) With Intersect(Range("tabl_name[[#all],[" & FormLogbook.ComboBox5 & "." & "]]").SpecialCells(2, 23), [tabl_name[#data]])
В итоге при выборе заголовка в основном комбобоксе в двух других загружаются разные списки, но как-бы привязанные к одному заголовку.. Не знаю корректен ли данный вариант… [vba]
Код
Sub ListSectionName() 'Загрузка списка таблицы tabl_section в ComboBox6 и таблицы tabl_name в ComboBox7 'Загрузка списка таблицы tabl_section в ComboBox6 On Error Resume Next With Intersect(Range("tabl_section[[#all],[" & FormLogbook.ComboBox5 & "]]").SpecialCells(2, 23), [tabl_section[#data]]) FormLogbook.ComboBox6.Clear With .Areas(1) FormLogbook.ComboBox6.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With
'Загрузка списка таблицы tabl_name в ComboBox7 On Error Resume Next With Intersect(Range("tabl_name[[#all],[" & FormLogbook.ComboBox5 & "." & "]]").SpecialCells(2, 23), [tabl_name[#data]]) FormLogbook.ComboBox7.Clear With .Areas(1) FormLogbook.ComboBox7.List = IIf(.Cells.Count > 1, .Value, Array(.Value)) End With End With End Sub
[/vba] [vba]
Код
Private Sub ComboBox5_Change() Call ListSectionName 'Загрузка списка таблицы tabl_section в ComboBox6 и таблицы tabl_name в ComboBox7 End Sub