2013-03-14 5 views
1

У меня есть процедура VBA (в Excel 2007), где я стремлюсь установить свойство ListFillRange в поле со списком в виде списка с использованием массива.заполнить combobox в VBA с элементами массива

Я знаю, что это работает, если я щелкнул правой кнопкой мыши на выпадающем списке и написал «Sheet1! $ F2: $ F17» рядом со свойством «ListFillRange». Я также могу сделать это в коде. Однако мне интересно динамически устанавливать значение этого свойства, назначая ему массив.

Я точно знаю, что массив работает, когда я тестировал его; есть, вероятно, ошибка синтаксиса здесь:

ThisWorkbook.Worksheets("Sheet1").OLEObjects("cmbS").ListFillRange = ar 

, когда я делаю это я получаю: ошибка «Несоответствие типов».

Результатом этого действия должно быть то, что компонент заполняется элементами массива, от элемента (0) ... до последнего элемента (n-1) массива. Любые указатели, спасибо вам большое!

Я также попытался:

ThisWorkbook.Worksheets("Sheet1").cmbS.list = ar 

и он говорит "нет прав"

Вот ComboBox свойства в случае, если это помогает: enter image description here

После тестирования и попытки, я нашел это работы:

ThisWorkbook.Worksheets("Sheet1").cmbS.ListFillRange = "" 

Dim i As Integer 
For i = LBound(ar) To UBound(ar) 
    ThisWorkbook.Worksheets("Sheet1").cmbS.AddItem (ar(i)) 

Next 

Тем не менее, я заинтересован в заполнении с всех значений сразу для более быстрого эффекта, не просто добавление элемента по элементам.

+0

Если он медленный, всегда устанавливайте обновление экрана до значения false перед использованием additem. –

ответ

0

Единственный способ, которым вы можете заполнить поле со списком с содержимым массива, - это выполнить элемент за элементом. Мне трудно поверить, что это будет очень медленный процесс, независимо от того, насколько большой ваш массив.

+5

Не совсем верно - вы можете присвоить 2D-массив свойству '.List'. Это работает как для списков со списком, так и для списков, например. 'MyComboBox.List = My2DArray' – blackworx

3

Я знаю его поздно, но, возможно, это поможет кому-то другому. По крайней мере, следующий код работает (намного быстрее, чем элемент для элемента) для меня.

dim arr() as variant 

arr = Worksheets("Total").Range("C2:"&lrow).Value 
Worksheets("Menu").ComboBox2.List = arr 
Смежные вопросы