Страницы: 1
RSS
Использование именованного диапазона в свойстве ListFillRange в ComboBox
 
Добрый день.

Нужно сделать выпадающий список, ссылающийся на диапазон данных переменной длины, используя ComboBox из перечня элементов Active X.

Через Диспетчер имен я создал именованный диапазон и назвал его CostCenters, однако мне не удается вставить это имя в ListFillRange в ComboBox, оно просто не сохраняется, поле становится пустым, как только я кликаю мышкой в любом другом месте или нажимаю Enter. Если же я указываю его в виде, например, $A1:$A5, то сохраняется без проблем.

Я пытался поменять свойство ListFillRange через VBA, используя следующие варианты кода:
Код
Private Sub ComboBox1_Change()
ComboBox1.ListFillRange = "=CostCenters"
End Sub
Код
Private Sub ComboBox1_Change()
ComboBox1.ListFillRange = "CostCenters"
End Sub
и тоже безрезультатно: список пуст, в свойстве ListFillRange пусто.

Аналогично происходит и с другими именами.

Любопытно, что я скачал файл с примером, в котором использован точно такой же прием, и там свойство ListFillRange заполнено, оно никуда не исчезает, если его убрать и снова добавить.

К сожалению, я не могу выложить свой файл, он содержит чувствительные данные. Помогите, пожалуйста, понять, куда копать.
 
надо добавить имя листа:
Код
ComboBox1.ListFillRange = "Sheet1!CostCenters"

если область действия диапазона книга - то имя листа должно само замениться на имя книги. Если этого не произошло - добавьте самостоятельно:
Код
ComboBox1.ListFillRange = "Книга1.xlsm!CostCenters"
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
К сожалению, все равно не работает. Список открывается в виде одной пустой строки.

Полностью код списка теперь выглядит так:
Код
Private Sub ComboBox1_Click()
ComboBox1.ListFillRange = "Решение.xlsm!CostCenters"
Me.ComboBox1.DropDown
End Sub
Изменено: Клоп Филимон - 13.09.2024 12:08:55
 
Цитата
Клоп Филимон написал:
все равно не работает.
у меня в моем файле работает. Это намек на файл-пример, если что.
Плюс, изначально я предлагал подставить имя листа, а не сразу книгу.
Изменено: Дмитрий(The_Prist) Щербаков - 13.09.2024 12:15:19
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Сделал, как Вы изначально предлагали.
Не работает.

Убрал из файла все лишнее и прикрепил.
 
У Вас там не просто диапазон, а умная таблица - она-то и мешает корректно применить метод назначения свойства указанным выше способом. Либо надо избавиться от умной таблицы и тогда Ваш код заработает, либо указывать диапазон адресом:
Код
ComboBox1.ListFillRange = [CostCenters].Address(1, 1, external:=True)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, действительно заработало.
Избавляться от умной таблицы не хочется, не могли бы Вы кратко пояснить синтаксис вот этого фрагмента кода?
Код
.Address(1, 1, external:=True)
Потребуется ли его изменить, если первая ячейка диапазона будет не А1 того листа, на котором он размещен?
 
Ничего менять не надо. Про Address вроде в справке все написано - возвращает адрес указанного диапазона. В данном случае - это диапазон CostCenters. external:=True - возвращать полный адрес, включая имя книги и листа(это уже на всякий случай).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Клоп Филимон написал:
И еще один вопрос,
Одна тема - один вопрос. И картинки, на форуме по Excel, ну как-то не комильфо...В Правилах форума есть пункт про файл-пример
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
У Вас там не просто диапазон, а умная таблица
Еще вариант
Код
Me.ComboBox1.ListFillRange = Worksheets("PC_lib").ListObjects("PC_lib2").DataBodyRange.Address(1, 1, external:=True)
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх