Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Преобразование динамического горизонтального диапазона в вертикальный
 
Проблемма в следующем: есть горизонтальный динамический диапазон с именем Objects (задан через СМЕЩ и СЧЕТЗ). При создании ComboBox  и задания RowSource = "Objects" происходит отображение только первого значения из диапазона. Был найден и подправлен под мои нужды вот такой код:
Dim r As Range
       ComboBox1.Clear
           For Each r In [II4].CurrentRegion
               ComboBox1.AddItem r.Value
           Next r
           ComboBox1.ListIndex = 0
   End If

Но, данный диапазон используется в 60 ComboBox'ах и для каждого переписывать одно и тоже как то не лаконично...
Как вариант вижу создание на скрытом листе вертикальной копии диапазона. Есть ещё свежие и красивые идеи?
 
Создать один массив, в который поместить все значения этого диапазона, а потом только назначать ComboBox-ам. В зависимости от того, что представляет из себя тот самый именованный диапазон, код заполнения массива может различаться(можно убрать цикл по элементам им.диапазона, если там всего один столбец):
Код
Dim x,arr,lr as long
redim arr(1 to [II4].CurrentRegion.Cells.Count)
For Each x In [II4].CurrentRegion.Value
       lr = lr + 1
       arr(lr) = x
Next r
ComboBox1.List = arr
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий Щербаков написал:
код заполнения массива может различаться(можно убрать цикл по элементам им.диапазона, если там всего один столбец):
у меня строка и нужные мне данные начинаются с ячейки ii4 и дальше вправо (записи постоянно добавляются). Как без цикла можно заполнить массив arr? Или я что_то не так понял?  8-0  
 
Цитата
Zulus-007 написал:
Как без цикла можно заполнить массив arr?
Код
Private Sub UserForm_Initialize()
Dim arr
  arr = WorksheetFunction.Transpose([Objects])
  ComboBox1.List = arr
  ComboBox2.List = arr
End Sub
Если динамический диапазон с именем Objects используется только для заполнения комбобоксов, можно добавить ТРАНСП() к формуле и в коде написать просто
Код
arr = [Objects]
Изменено: Казанский - 15 Мар 2018 20:03:40
 
Цитата
Zulus-007 написал:
у меня строка и нужные мне данные начинаются
надо сразу условия оглашать и приводить нормальные примеры. Тогда и ответ будет соответствующий: четкий и не размытый. Как спросили - так я ответил :)
Цитата
Zulus-007 написал:
Как без цикла можно заполнить массив arr?
Цитата
Дмитрий Щербаков написал:
код заполнения массива может различаться(можно убрать цикл по элементам им.диапазона
По сути - Казанский дал ответ выше.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Прошу прощения, компьютер был на работе, по этой причине не смог выложить пример. И спасибо огромное! Через добавление ТРАНС() в описание именованного диапазона всё заработало идеально! Получилось стильно, модно, молодёжно))  :D  
Страницы: 1
Читают тему (гостей: 1)