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

Вход

Регистрация

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

 

= Мир MS Excel/Зависимые Комбобокы. Загрузка списка при выборе заголовка - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависимые Комбобокы. Загрузка списка при выборе заголовка (Макросы/Sub)
Зависимые Комбобокы. Загрузка списка при выборе заголовка
Сергей13 Дата: Суббота, 09.03.2019, 18:06 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.
Ребята пытался сам, но получается сервелат, в сети в основном демонстрирую примеры построчной зависимости… Помогите создать зависимость списков динамической таблицы, где при выборе из списка нужного заголовка в Комбобоксе3, необходимо загрузить в Комбобокс4 список, соответствующий выбранному заголовку.
В тестовом варианте уже прописаны некоторые глобальные переменные, если они необходимы и работает загрузка данными Комбобокса3.
К сообщению приложен файл: Spisok.zip (74.6 Kb)


Сообщение отредактировал Сергей13 - Суббота, 09.03.2019, 18:12
 
Ответить
СообщениеЗдравствуйте.
Ребята пытался сам, но получается сервелат, в сети в основном демонстрирую примеры построчной зависимости… Помогите создать зависимость списков динамической таблицы, где при выборе из списка нужного заголовка в Комбобоксе3, необходимо загрузить в Комбобокс4 список, соответствующий выбранному заголовку.
В тестовом варианте уже прописаны некоторые глобальные переменные, если они необходимы и работает загрузка данными Комбобокса3.

Автор - Сергей13
Дата добавления - 09.03.2019 в 18:06
RAN Дата: Суббота, 09.03.2019, 19:17 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
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
[/vba]

Автор - RAN
Дата добавления - 09.03.2019 в 19:17
Сергей13 Дата: Суббота, 09.03.2019, 20:18 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
RAN, Код работает если нет каких-либо неких факторов…
Например если в таблице меньше двух строк, то на момент выбора в комбобоксе3 выдает ошибку. Для корректной работы необходимо чтобы таблица была растянута на несколько строк, не меньше двух.
Еще момент есть код который очищает все поля кнопкой
[vba]
Код
Sub AddData()
        FormLogbook.ComboBox3.Value = "" 'Очистка поля
End Sub
[/vba]
при очищение поля ComboBox3 выдается ошибка на строку кода
[vba]
Код
ComboBox4.List = Range("tabl_group").ListObject.ListColumns(ComboBox3.Value).DataBodyRange.Value
[/vba]
Можно ли эти два вышеописанных момента подкорректировать?


Сообщение отредактировал Сергей13 - Суббота, 09.03.2019, 21:02
 
Ответить
СообщениеRAN, Код работает если нет каких-либо неких факторов…
Например если в таблице меньше двух строк, то на момент выбора в комбобоксе3 выдает ошибку. Для корректной работы необходимо чтобы таблица была растянута на несколько строк, не меньше двух.
Еще момент есть код который очищает все поля кнопкой
[vba]
Код
Sub AddData()
        FormLogbook.ComboBox3.Value = "" 'Очистка поля
End Sub
[/vba]
при очищение поля ComboBox3 выдается ошибка на строку кода
[vba]
Код
ComboBox4.List = Range("tabl_group").ListObject.ListColumns(ComboBox3.Value).DataBodyRange.Value
[/vba]
Можно ли эти два вышеописанных момента подкорректировать?

Автор - Сергей13
Дата добавления - 09.03.2019 в 20:18
krosav4ig Дата: Воскресенье, 10.03.2019, 02:21 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
[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
[/vba]
для разнообразия, вместо [vba]
Код
Application.Transpose(Range("tabl_group").ListObject.HeaderRowRange.Value)
[/vba] можно [vba]
Код
[transpose(tabl_group[#headers])]
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение[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
[/vba]
для разнообразия, вместо [vba]
Код
Application.Transpose(Range("tabl_group").ListObject.HeaderRowRange.Value)
[/vba] можно [vba]
Код
[transpose(tabl_group[#headers])]
[/vba]

Автор - krosav4ig
Дата добавления - 10.03.2019 в 02:21
Сергей13 Дата: Воскресенье, 10.03.2019, 03:39 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig, В тестовом варианте срабатывает, а в рабочем никак... Пришлось повозиться, все полностью удалять, доводя рабочий вариант до тестового, пытаясь найти помеху, которая не дает загрузить список и только тогда, когда создал заголовки как в тестовом, загрузка произошла.
Заголовки влияют на загрузку… Почему так?

Посмотрите тестовый вариант. Не срабатывает на второй и третий список.
К сообщению приложен файл: 2.3.zip (76.3 Kb)


Сообщение отредактировал Сергей13 - Воскресенье, 10.03.2019, 03:46
 
Ответить
Сообщениеkrosav4ig, В тестовом варианте срабатывает, а в рабочем никак... Пришлось повозиться, все полностью удалять, доводя рабочий вариант до тестового, пытаясь найти помеху, которая не дает загрузить список и только тогда, когда создал заголовки как в тестовом, загрузка произошла.
Заголовки влияют на загрузку… Почему так?

Посмотрите тестовый вариант. Не срабатывает на второй и третий список.

Автор - Сергей13
Дата добавления - 10.03.2019 в 03:39
krosav4ig Дата: Воскресенье, 10.03.2019, 03:46 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
чем отличаются заголовки в рабочем и тестовом файле?


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениечем отличаются заголовки в рабочем и тестовом файле?

Автор - krosav4ig
Дата добавления - 10.03.2019 в 03:46
Сергей13 Дата: Воскресенье, 10.03.2019, 03:47 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig, Посмотрите пример выше добавил.


Сообщение отредактировал Сергей13 - Воскресенье, 10.03.2019, 03:47
 
Ответить
Сообщениеkrosav4ig, Посмотрите пример выше добавил.

Автор - Сергей13
Дата добавления - 10.03.2019 в 03:47
krosav4ig Дата: Воскресенье, 10.03.2019, 03:51 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
скобочек не хватило :) [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
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениескобочек не хватило :) [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
[/vba]

Автор - krosav4ig
Дата добавления - 10.03.2019 в 03:51
Сергей13 Дата: Воскресенье, 10.03.2019, 03:59 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig, Сейчас вроде нормально.
Я уже все… Есть еще нюанс не связанный с ошибкой, не знаю сам справлюсь… Завтра полностью пробью сообщу.
Спок. Ночи!


Сообщение отредактировал Сергей13 - Воскресенье, 10.03.2019, 04:01
 
Ответить
Сообщениеkrosav4ig, Сейчас вроде нормально.
Я уже все… Есть еще нюанс не связанный с ошибкой, не знаю сам справлюсь… Завтра полностью пробью сообщу.
Спок. Ночи!

Автор - Сергей13
Дата добавления - 10.03.2019 в 03:59
Сергей13 Дата: Воскресенье, 10.03.2019, 12:21 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
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]


Сообщение отредактировал Сергей13 - Воскресенье, 10.03.2019, 14:07
 
Ответить
Сообщение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]

Автор - Сергей13
Дата добавления - 10.03.2019 в 12:21
krosav4ig Дата: Воскресенье, 10.03.2019, 14:17 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Цитата Сергей13, 10.03.2019 в 12:21, в сообщении № 10 ()
корректен ли данный вариант…
Ну, дык работает, значит корректен. Но следует учесть, что корректно работать будет, если в столбцах не будет формул, ибо [vba]
Код
.SpecialCells(2, 23)
[/vba] выбирает диапазон, содержащий константы


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение
Цитата Сергей13, 10.03.2019 в 12:21, в сообщении № 10 ()
корректен ли данный вариант…
Ну, дык работает, значит корректен. Но следует учесть, что корректно работать будет, если в столбцах не будет формул, ибо [vba]
Код
.SpecialCells(2, 23)
[/vba] выбирает диапазон, содержащий константы

Автор - krosav4ig
Дата добавления - 10.03.2019 в 14:17
Сергей13 Дата: Воскресенье, 10.03.2019, 14:38 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig,
Мало о чем говорит
[vba]
Код
.SpecialCells(2, 23)
[/vba]
В смысле все то, что через знак равенство?
 
Ответить
Сообщениеkrosav4ig,
Мало о чем говорит
[vba]
Код
.SpecialCells(2, 23)
[/vba]
В смысле все то, что через знак равенство?

Автор - Сергей13
Дата добавления - 10.03.2019 в 14:38
Сергей13 Дата: Воскресенье, 10.03.2019, 15:56 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig, Благодарю, за помощь!


Сообщение отредактировал Сергей13 - Воскресенье, 10.03.2019, 15:56
 
Ответить
Сообщениеkrosav4ig, Благодарю, за помощь!

Автор - Сергей13
Дата добавления - 10.03.2019 в 15:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависимые Комбобокы. Загрузка списка при выборе заголовка (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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