Вопрос:
У меня есть процедура VBA (в Excel 2007), где я стремлюсь установить свойство ListFillRange в поле со списком в виде списка с использованием массива.
Я знаю, что это работает, если я нажимаю правой кнопкой мыши на поле со списком и пишу “Sheet1! $F2: $F17” рядом со свойством “ListFillRange”. Я также могу сделать это в коде. Тем не менее, мне интересно динамически устанавливать значение этого свойства, назначая ему массив.
Я точно знаю, что массив работает, когда я его тестировал; здесь, вероятно, есть синтаксическая ошибка:
ThisWorkbook.Worksheets(«Sheet1»).OLEObjects(«cmbS»).ListFillRange = ar
когда я это делаю, я получаю:
Ошибка “Тип несоответствия”.
Результатом этого действия должно быть то, что компонент заполняется элементами массива, от элемента (0)… до последнего элемента (n-1) массива. Любые указатели, спасибо вам большое!
Я также пробовал:
ThisWorkbook.Worksheets(«Sheet1»).cmbS.list = ar
и он говорит, что “разрешение отклонено”
Вот свойства combobox, если это помогает:
После тестирования и тестирования я нашел, что это работает:
ThisWorkbook.Worksheets(«Sheet1»).cmbS.ListFillRange = «» Dim i As Integer For i = LBound(ar) To UBound(ar) ThisWorkbook.Worksheets(«Sheet1»).cmbS.AddItem (ar(i)) Next
Тем не менее, я заинтересован в заполнении всех значений сразу для более быстрого эффекта, , а не просто добавлении элемента по элементу.
Ответ №1
Я знаю его поздно, но, возможно, он поможет кому-то другому. По крайней мере, следующий код работает (намного быстрее, чем элемент для элемента) для меня.
dim arr() as variant arr = Worksheets(«Total»).Range(«C2:»&lrow).Value Worksheets(«Menu»).ComboBox2.List = arr Ответ №2
Единственный способ, которым вы можете заполнить поле со списком с содержимым массива, – это элемент за элементом. Мне трудно поверить, что это будет очень медленный процесс независимо от того, насколько велика ваша массив.