2014-09-10 2 views
1

Я пытаюсь создать пользовательскую форму, которая позволяет кому-то выбрать некоторые параметры и ввести данные в мой лист excel. В пользовательской форме у меня есть окно с несколькими ответами. У меня это так, что Пользователь может выбрать несколько ответов в поле «Список».EXCEL VBA - ввод данных с многопользовательским списком списка пользователей UserForm

Если пользователь выбирает 2 ответа, я хочу, чтобы лист Excel регистрировал 2 строки данных. Если пользователь выбирает 3 ответа, я хочу, чтобы лист excel регистрировал 3 строки данных.

В основном я выполняю именно то, что описано здесь: http://www.excel-easy.com/vba/userform.html, за исключением «City Preference» ListBox, я могу выбрать несколько вариантов. Я хочу, чтобы лист excel создавал позицию для каждого выбранного предпочтения города, сохраняя при этом все остальные варианты.

Я думаю, код будет выглядеть примерно так:

For i = 1 to "total # of items selected in listbox" 
    emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1 
    Worksheet.Cell(emptyrow,3).Value = "Selected item(i) from list box" 
Next I 

Спасибо!

ответ

2

Используйте функцию, как это возвращает массив выбранных элементов:

Public Function GetSelectedItems(lBox As MSForms.ListBox) As Variant 
'returns an array of selected items in a ListBox 
Dim tmpArray() As Variant 
Dim i As Integer 
Dim selCount As Integer 

     selCount = -1 
     For i = 0 To lBox.ListCount - 1 
      If lBox.selected(i) = True Then 
       selCount = selCount + 1 
       ReDim Preserve tmpArray(selCount) 
       tmpArray(selCount) = lBox.List(i) 

      End If 
     Next 
     If selCount = -1 Then 
      GetSelectedItems = Array() 
     Else: 
      GetSelectedItems = tmpArray 
     End If 
End Sub 

Затем измените ваш код:

Dim selectedItems as Variant 
selectedItems = GetSelectedItems(myListBox) 'Modify this line to refer to your listbox name 

For i = lBound(selectedItems) to UBound(selectedItems) 
    emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1 
    Worksheet.Cell(emptyrow,3).Value = selectedItems(i) 
Next 
+0

Спасибо! Я попробую это и посмотрю, работает ли это. В первый раз, вот так я могу сделать для вас репутацию? – user145190

+0

Да работает отлично. Спасибо за помощь! – user145190

+1

+ 1 хорошая работа :) –

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