2016-11-23 5 views
0

Для проекта я хочу заполнить Combobox на Userform с переменным количеством опций. Количество опций зависит от суммы, указанной ранее в листе. Пользователь вводит значение и присваивает имена всем этим значениям. Может быть, есть только 2 имени, но также может быть, что их, например, 10.Используйте цикл For-loop для заполнения Combobox

Я хотел бы, чтобы Combobox использовал указанное значение (количество имен), чтобы заполнить себя именами, которые хранятся в разных местах. Мой текущий код представлен ниже, но это дает мне следующую ошибку компиляции, а затем выбирает .AddItem части в качестве источника ошибки ..

Compile error: Expected Function or variable

Private Sub UserForm_Initialize() 
'Sheet1.Range("A1") contains the value for the amount of names 

If Sheet1.Range("A1") = 0 Or Sheet1.Range("A1") = "" Then 
    'Do Nothing 
Else 
    With ComboBox1 
     For n = 1 To Sheet1.Range("A1") 
      'col determines the column in which the names are found 
      'The first name is in column 2, the next in column 10, etc. 
      col = 2 + 8 * (n - 1) 
      .AddItem = Sheet2.Cells(5, col) 
     Next 
    End With 
End If 

End Sub 

Надеется, моя проблема ясна. У меня такое чувство, что я уже очень близко к ответу, но я не мог найти его нигде с помощью Google.

ответ

4

.Additem - это метод, а не свойство, которое вы можете установить. Вы должны предоставить элемент в качестве аргумента, т.е.

.AddItem Sheet2.Cells(5, col) 
+0

Спасибо! – Peleus

1

в качестве альтернативы можно использовать List свойство из ComboBox объекта и заполнить его через массив следующим образом:

Private Sub UserForm_Initialize() 
    With Sheet1.Range("A1") 'reference the cell that contains the value for the amount of names 
     If .Value > 0 Then Me.ComboBox1.List = GetValues(.Value) '<--| fill ComboBox via its 'List' property passing it the array returned by GetValues() function 
    End With 
End Sub 

Function GetValues(nCols As Long) As Variant 
    Dim n As Long 

    ReDim vals(1 To nCols) As Variant '<--| size the array to match the amount of names passed in 
    For n = 1 To nCols 
     vals(n) = Sheet2.Cells(5, 2 + 8 * (n - 1)) '<--| fill the array: the first name is in column 2, the next in column 10, etc. 
    Next 
    GetValues = vals '<--| return the filled array 
End Function 

, который будет также сделать ваш код более «модульный»

Смежные вопросы