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

Вход

Регистрация

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

 

= Мир MS Excel/Связанные списки ComboBox - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Связанные списки ComboBox
Jenialij Дата: Пятница, 24.01.2025, 16:21 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

2021
Здравствуйте.

В файле два листа "ReportS" - отчет, и "Nomenclature" - справочники.
На листе "ReportS" есть работающие связанные списки, созданные через "проверку данных": "Категории" и "Номенклатура".
Каждому элементу из "умной" таблицы "Категории" соответствует "умная" таблица Номенклатуры с таким же названием. При наличии пробелов в названиях Категорий происходит замена на "_".
Значения из списков "Категории" и "Номенклатура" использовались как условия для создания отчета продаж, реализованном с помощью формул (самого отчета в примере нет, дабы не загромождать).
Решил заменить стандартные списки на ComboBox. Первый ComboBox1 работает. Пытался использовать в ComboBox2 переменную, которой присваивается значение из ComboBox1. Но не работает. Прошу помочь.

[vba]
Код
Private Sub ComboBox1_Change()
Worksheets("ReportS").ComboBox2.Clear
    With Worksheets("Nomenclature")
        Worksheets("ReportS").ComboBox1.ListFillRange = "'" & .Name & "'!" & .ListObjects("Категорія").ListColumns("Категорія").DataBodyRange.Address
    End With
End Sub
[/vba]

[vba]
Код
Sub ComboBox2_Change()
Dim ComboBox1Value As String
ComboBox1Value = Replace(ComboBox1.Value, " ", "_")
    With Worksheets("Nomenclature")
        Worksheets("ReportS").ComboBox2.ListFillRange = "'" & .Name & "'!" & .ListObjects("ComboBox1Value").ListColumns("ComboBox1Value").DataBodyRange.Address
    End With
End Sub
[/vba]

И еще вопрос, а то не совсем понимаю.
Возможно ли использовать значение, выбранное в ComboBox, в обычных формулах Excel?
Т.е., если при использовании обычных списков, я могу подставить в формулу значение из ячейки (например, как условие в функции "ЕСЛИ"), то как теперь это сделать при использовании ComboBox?
Или это возможно только через предварительную запись значения из ComboBox в какую-то ячейку (Cells(ХХ, ХХ) = ComboBox1.Value), и в формуле уже ссылаться на нее?
К сообщению приложен файл: example.xls (64.5 Kb)
 
Ответить
СообщениеЗдравствуйте.

В файле два листа "ReportS" - отчет, и "Nomenclature" - справочники.
На листе "ReportS" есть работающие связанные списки, созданные через "проверку данных": "Категории" и "Номенклатура".
Каждому элементу из "умной" таблицы "Категории" соответствует "умная" таблица Номенклатуры с таким же названием. При наличии пробелов в названиях Категорий происходит замена на "_".
Значения из списков "Категории" и "Номенклатура" использовались как условия для создания отчета продаж, реализованном с помощью формул (самого отчета в примере нет, дабы не загромождать).
Решил заменить стандартные списки на ComboBox. Первый ComboBox1 работает. Пытался использовать в ComboBox2 переменную, которой присваивается значение из ComboBox1. Но не работает. Прошу помочь.

[vba]
Код
Private Sub ComboBox1_Change()
Worksheets("ReportS").ComboBox2.Clear
    With Worksheets("Nomenclature")
        Worksheets("ReportS").ComboBox1.ListFillRange = "'" & .Name & "'!" & .ListObjects("Категорія").ListColumns("Категорія").DataBodyRange.Address
    End With
End Sub
[/vba]

[vba]
Код
Sub ComboBox2_Change()
Dim ComboBox1Value As String
ComboBox1Value = Replace(ComboBox1.Value, " ", "_")
    With Worksheets("Nomenclature")
        Worksheets("ReportS").ComboBox2.ListFillRange = "'" & .Name & "'!" & .ListObjects("ComboBox1Value").ListColumns("ComboBox1Value").DataBodyRange.Address
    End With
End Sub
[/vba]

И еще вопрос, а то не совсем понимаю.
Возможно ли использовать значение, выбранное в ComboBox, в обычных формулах Excel?
Т.е., если при использовании обычных списков, я могу подставить в формулу значение из ячейки (например, как условие в функции "ЕСЛИ"), то как теперь это сделать при использовании ComboBox?
Или это возможно только через предварительную запись значения из ComboBox в какую-то ячейку (Cells(ХХ, ХХ) = ComboBox1.Value), и в формуле уже ссылаться на нее?

Автор - Jenialij
Дата добавления - 24.01.2025 в 16:21
Jenialij Дата: Пятница, 24.01.2025, 18:46 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

2021
Ошибку у себя нашел. Для ComboBox2 названия столбцов должны быть с пробелами.

[vba]
Код
Sub ComboBox2_Change()

Dim ComboBox1Value As String, ComboBox1Value2 As String
ComboBox1Value = Replace(ComboBox1.Value, " ", "_")
ComboBox1Value2 = ComboBox1.Value

    With Worksheets("Nomenclature")
        Worksheets("ReportS").ComboBox2.ListFillRange = "'" & .Name & "'!" & .ListObjects("ComboBox1Value").ListColumns("ComboBox1Value2").DataBodyRange.Address
    End With
End Sub
[/vba]

Но все равно не работает.
 
Ответить
СообщениеОшибку у себя нашел. Для ComboBox2 названия столбцов должны быть с пробелами.

[vba]
Код
Sub ComboBox2_Change()

Dim ComboBox1Value As String, ComboBox1Value2 As String
ComboBox1Value = Replace(ComboBox1.Value, " ", "_")
ComboBox1Value2 = ComboBox1.Value

    With Worksheets("Nomenclature")
        Worksheets("ReportS").ComboBox2.ListFillRange = "'" & .Name & "'!" & .ListObjects("ComboBox1Value").ListColumns("ComboBox1Value2").DataBodyRange.Address
    End With
End Sub
[/vba]

Но все равно не работает.

Автор - Jenialij
Дата добавления - 24.01.2025 в 18:46
MikeVol Дата: Суббота, 25.01.2025, 22:35 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 389
Репутация: 84 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Jenialij, Доброї доби. Посмотрите файл, там всё сделал как вы и просите. Удачи вам!
К сообщению приложен файл: 25_01_2025_exw_svjazannye_spis.xls (65.5 Kb)


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Суббота, 25.01.2025, 22:37
 
Ответить
СообщениеJenialij, Доброї доби. Посмотрите файл, там всё сделал как вы и просите. Удачи вам!

Автор - MikeVol
Дата добавления - 25.01.2025 в 22:35
Jenialij Дата: Понедельник, 27.01.2025, 16:24 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

2021
MikeVol, спасибо!
С опозданием отвечаю, т.к. не было возможности.

Протестировал и выявил несколько нюансов.
1. Если файл открыть при других открытых книгах, то ComboBox1 и 2 не работают.
2. В процедуру "Private Sub ComboBox1_Change()" добавил команду для очистки ComboBox2, поскольку без нее в ComboBox2 накапливается весь список номенклатуры, а не тот, что соответствует только выбранной категории:
[vba]
Код
Worksheets("ReportS").ComboBox2.Clear
[/vba]
Но, снова таки, при первых изменениях ComboBox1 очистка ComboBox2 не происходит. Нужно сначала выбрать номенклатуру, и только при повторном изменении категории, очищается ComboBox2.
3. Добавление/удаление категорий отображается в ComboBox1 только при переоткрытии книги.

Можно это "подкрутить", ибо не уверен, что сам справлюсь?
 
Ответить
СообщениеMikeVol, спасибо!
С опозданием отвечаю, т.к. не было возможности.

Протестировал и выявил несколько нюансов.
1. Если файл открыть при других открытых книгах, то ComboBox1 и 2 не работают.
2. В процедуру "Private Sub ComboBox1_Change()" добавил команду для очистки ComboBox2, поскольку без нее в ComboBox2 накапливается весь список номенклатуры, а не тот, что соответствует только выбранной категории:
[vba]
Код
Worksheets("ReportS").ComboBox2.Clear
[/vba]
Но, снова таки, при первых изменениях ComboBox1 очистка ComboBox2 не происходит. Нужно сначала выбрать номенклатуру, и только при повторном изменении категории, очищается ComboBox2.
3. Добавление/удаление категорий отображается в ComboBox1 только при переоткрытии книги.

Можно это "подкрутить", ибо не уверен, что сам справлюсь?

Автор - Jenialij
Дата добавления - 27.01.2025 в 16:24
MikeVol Дата: Понедельник, 27.01.2025, 22:31 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 389
Репутация: 84 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Jenialij, Доброї доби. Вроде бы сейчас то что надо. При переходе с листа на лист будет
3. Добавление/удаление категорий отображается в ComboBox1 только при переоткрытии книги.

1. У меня не воспроизводится данная проблема.
2. Решил.
Смотрите файл. Мира и Здоровья вам!
К сообщению приложен файл: 27_01_2025_exw_svjazannye_spis.xls (78.0 Kb)


Ученик.
Одесса - Украина
 
Ответить
СообщениеJenialij, Доброї доби. Вроде бы сейчас то что надо. При переходе с листа на лист будет
3. Добавление/удаление категорий отображается в ComboBox1 только при переоткрытии книги.

1. У меня не воспроизводится данная проблема.
2. Решил.
Смотрите файл. Мира и Здоровья вам!

Автор - MikeVol
Дата добавления - 27.01.2025 в 22:31
Jenialij Дата: Вторник, 28.01.2025, 12:27 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

2021
MikeVol, еще раз благодарю за то, что уделили время.
***
С пунктом "2. Очистка ComboBox2" все же есть нюансы.
Пошагово опишу.
Вариант 1. Предварительно ComboBox1 и ComboBox2 заполнены значениями.
1. Открываем книгу. Меняем значение ComboBox1 (категории) - при этом ComboBox2 НЕ очищается.
2. Устанавливаем значение ComboBox2.
3. Повторно меняем значение ComboBox1 - при этом ComboBox2 уже очищается.
Т.е., первое изменение ComboBox1 после открытия книги не приводит к очистке ComboBox2.

Вариант 2. Предварительно ComboBox1 заполнен значением, а ComboBox2 - пустой.
1. Открываем книгу. Пробуем выбрать значение для ComboBox2, но список пуст, хотя ComboBox1 заполнен.
2. Меняем значение ComboBox1. После этого уже можно выбирать значения из ComboBox2.
Т.е., после открытия книги ComboBox2 не содержит списка, соответствующего выбранной категории в ComboBox1.

По большему счету, все это не так уж критично, и можно смириться. Но, если возможно...
***
С пунктом №1 буду разбираться, т.к. у меня такое поведение все же наблюдается.
Странно. Если файл открыть первым, а потом другие книги, то все хорошо. А если файл открыть при других открытых книгах, то ComboBox-ы не работают.
***
Добра вам!
 
Ответить
СообщениеMikeVol, еще раз благодарю за то, что уделили время.
***
С пунктом "2. Очистка ComboBox2" все же есть нюансы.
Пошагово опишу.
Вариант 1. Предварительно ComboBox1 и ComboBox2 заполнены значениями.
1. Открываем книгу. Меняем значение ComboBox1 (категории) - при этом ComboBox2 НЕ очищается.
2. Устанавливаем значение ComboBox2.
3. Повторно меняем значение ComboBox1 - при этом ComboBox2 уже очищается.
Т.е., первое изменение ComboBox1 после открытия книги не приводит к очистке ComboBox2.

Вариант 2. Предварительно ComboBox1 заполнен значением, а ComboBox2 - пустой.
1. Открываем книгу. Пробуем выбрать значение для ComboBox2, но список пуст, хотя ComboBox1 заполнен.
2. Меняем значение ComboBox1. После этого уже можно выбирать значения из ComboBox2.
Т.е., после открытия книги ComboBox2 не содержит списка, соответствующего выбранной категории в ComboBox1.

По большему счету, все это не так уж критично, и можно смириться. Но, если возможно...
***
С пунктом №1 буду разбираться, т.к. у меня такое поведение все же наблюдается.
Странно. Если файл открыть первым, а потом другие книги, то все хорошо. А если файл открыть при других открытых книгах, то ComboBox-ы не работают.
***
Добра вам!

Автор - Jenialij
Дата добавления - 28.01.2025 в 12:27
MikeVol Дата: Вторник, 28.01.2025, 16:04 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 389
Репутация: 84 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
1. Открываем книгу. Меняем значение ComboBox1 (категории) - при этом ComboBox2 НЕ очищается.

Тут вы лукавите! При открытии книги изначально происходит очистка всех ComboBox-в [vba]
Код
Option Explicit

Private Sub Workbook_Open()
    FillCombo
End Sub
[/vba]Что в своё время вызывает другую процедуру [vba]
Код
Option Explicit

Public Sub FillCombo()
    Application.ScreenUpdating = False
    ThisWorkbook.Worksheets("ReportS").ComboBox1.Clear
    ThisWorkbook.Worksheets("ReportS").ComboBox2.Clear
    ThisWorkbook.Worksheets("ReportS").ComboBox1.List = Application.Transpose(ThisWorkbook.Worksheets("Nomenclature").ListObjects("Категорія").ListColumns("Категорія").DataBodyRange.Value)
    Application.ScreenUpdating = True
End Sub
[/vba]где и происходит очистка ComboBox-в
1. Открываем книгу. Пробуем выбрать значение для ComboBox2, но список пуст, хотя ComboBox1 заполнен.
Тут вы тоже лукавите! Смотрим скрин Связанные списки ComboBox_OpenBook, далее смотрим скрин Связанные списки ComboBox_OpenBook_Combo1 и далее смотрим скрин Связанные списки ComboBox_OpenBook_Combo2 Незнаю почему у вас так но у меня всё путём, всё так работает как и требуется.
Странно. Если файл открыть первым, а потом другие книги, то все хорошо. А если файл открыть при других открытых книгах, то ComboBox-ы не работают.
У меня что первым его открыть что вторым или третьем его открыть всё работает. Вы случаем не поместили код процедур из моего файла в Личную Книгу макросов или в собственную надстройку?

P.S.Сайт (форум) изминил имена скриншотов!
К сообщению приложен файл: 6651185.png (13.9 Kb) · 5785262.png (14.9 Kb) · 2810837.png (27.2 Kb)


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Вторник, 28.01.2025, 16:06
 
Ответить
Сообщение
1. Открываем книгу. Меняем значение ComboBox1 (категории) - при этом ComboBox2 НЕ очищается.

Тут вы лукавите! При открытии книги изначально происходит очистка всех ComboBox-в [vba]
Код
Option Explicit

Private Sub Workbook_Open()
    FillCombo
End Sub
[/vba]Что в своё время вызывает другую процедуру [vba]
Код
Option Explicit

Public Sub FillCombo()
    Application.ScreenUpdating = False
    ThisWorkbook.Worksheets("ReportS").ComboBox1.Clear
    ThisWorkbook.Worksheets("ReportS").ComboBox2.Clear
    ThisWorkbook.Worksheets("ReportS").ComboBox1.List = Application.Transpose(ThisWorkbook.Worksheets("Nomenclature").ListObjects("Категорія").ListColumns("Категорія").DataBodyRange.Value)
    Application.ScreenUpdating = True
End Sub
[/vba]где и происходит очистка ComboBox-в
1. Открываем книгу. Пробуем выбрать значение для ComboBox2, но список пуст, хотя ComboBox1 заполнен.
Тут вы тоже лукавите! Смотрим скрин Связанные списки ComboBox_OpenBook, далее смотрим скрин Связанные списки ComboBox_OpenBook_Combo1 и далее смотрим скрин Связанные списки ComboBox_OpenBook_Combo2 Незнаю почему у вас так но у меня всё путём, всё так работает как и требуется.
Странно. Если файл открыть первым, а потом другие книги, то все хорошо. А если файл открыть при других открытых книгах, то ComboBox-ы не работают.
У меня что первым его открыть что вторым или третьем его открыть всё работает. Вы случаем не поместили код процедур из моего файла в Личную Книгу макросов или в собственную надстройку?

P.S.Сайт (форум) изминил имена скриншотов!

Автор - MikeVol
Дата добавления - 28.01.2025 в 16:04
Jenialij Дата: Вторник, 28.01.2025, 16:54 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

2021
Уважаемый MikeVol, нет, не лукавлю. )
Все описанное мной происходит с файлом 27_01_2025_exw_svjazannye_spis.xls, скачанным с форума (ничего нигде не менял кроме, собственно, значений ComboBox).
Мог бы подтвердить свои слова видео, но не ужму его до 500кб, а ссылки на сторонние ресурсы запрещены.
*
Значит что-то где-то у меня...
Буду искать в чем проблема.
*
Еще раз благодарю за помощь.
 
Ответить
СообщениеУважаемый MikeVol, нет, не лукавлю. )
Все описанное мной происходит с файлом 27_01_2025_exw_svjazannye_spis.xls, скачанным с форума (ничего нигде не менял кроме, собственно, значений ComboBox).
Мог бы подтвердить свои слова видео, но не ужму его до 500кб, а ссылки на сторонние ресурсы запрещены.
*
Значит что-то где-то у меня...
Буду искать в чем проблема.
*
Еще раз благодарю за помощь.

Автор - Jenialij
Дата добавления - 28.01.2025 в 16:54
MikeVol Дата: Вторник, 28.01.2025, 21:52 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 389
Репутация: 84 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Еще раз благодарю за помощь.

Обращайтесь, помогу чем смогу.
Значит что-то где-то у меня...

Как бы да, у меня всё чётко отрабатывает. Мира и Здоровья!


Ученик.
Одесса - Украина
 
Ответить
Сообщение
Еще раз благодарю за помощь.

Обращайтесь, помогу чем смогу.
Значит что-то где-то у меня...

Как бы да, у меня всё чётко отрабатывает. Мира и Здоровья!

Автор - MikeVol
Дата добавления - 28.01.2025 в 21:52
  • Страница 1 из 1
  • 1
Поиск:

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