2016-07-21 5 views
0

У меня есть многосегментный список со стилем опции (chk boxes слева). У меня есть приведенный ниже код для переноса выбранных данных на рабочий лист (это должно быть динамическим, поскольку сам список содержит динамический именованный диапазон).MultiSelection Listbox Userform

Private Sub cmdRun_Click() 

Dim i As Integer 

i = 0 

Do While i < lstProperties.ListCount + 1 
    If lstProperties.Selected(i) = True Then 
    Sheet7.Cells(i + 1, 1) = lstProperties.List(i) 
    End If 
    i = i + 1 
Loop 

End Sub 

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

Кто-нибудь знает, как этого избежать?

ответ

0

Вам нужно отдельную переменную для ссылки на строки, так что вы можете увеличить его только тогда, когда выбран элемент из выпадающего списка ...

Private Sub cmdRun_Click() 

Dim Rw As Integer 
Dim i As Integer 

Sheet7.Columns(1).ClearContents 

Rw = 1 
i = 0 
Do While i < lstProperties.ListCount 
    If lstProperties.Selected(i) = True Then 
     Sheet7.Cells(Rw, 1) = lstProperties.List(i) 
     Rw = Rw + 1 
    End If 
    i = i + 1 
Loop 

End Sub 
+0

Это делает так, но он по-прежнему будет добавлять только первый выбор на рабочий лист. По-прежнему кажется, что он вызывает пользовательскую форму после первого цикла, и поэтому при повторном запуске кода ничего не выбрано. –

+0

Код всегда копирует все выбранные элементы на ваш рабочий лист, начиная с строки 1. Если вы хотите заменить любые существующие результаты, вам нужно очистить столбец, прежде чем снова запустите свой код. Если вы хотите скопировать их в следующую доступную строку, вам нужно будет изменить «Rw = 1», чтобы назначить следующую доступную строку вашей переменной. – Domenic

+0

Если я скопирую код именно так, как вы предоставили, он будет копировать первый выбранный элемент в строку 1 каждый раз. Например, если у меня есть элемент списка ABC & DEF, он скопирует ABC в строку 1; если я только что выбрал DEF, он скопирует DEF в строку 1. Это потому, что я инициализирую? 'Private Sub Userform_Initialize() Me.lstProperties.RowSource = "FilterData" Me.lstStmts.RowSource = "propsNOI" Me.lstLoans.RowSource = "FilterLoans" Конец Sub' –