У меня есть многосегментный список со стилем опции (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
Похоже, он хочет работать, но я думаю, когда я запускаю команду он отменить выбор данных в окне списка после первого цикла, и поэтому только транспонирующих первый выбор в списке.
Кто-нибудь знает, как этого избежать?
Это делает так, но он по-прежнему будет добавлять только первый выбор на рабочий лист. По-прежнему кажется, что он вызывает пользовательскую форму после первого цикла, и поэтому при повторном запуске кода ничего не выбрано. –
Код всегда копирует все выбранные элементы на ваш рабочий лист, начиная с строки 1. Если вы хотите заменить любые существующие результаты, вам нужно очистить столбец, прежде чем снова запустите свой код. Если вы хотите скопировать их в следующую доступную строку, вам нужно будет изменить «Rw = 1», чтобы назначить следующую доступную строку вашей переменной. – Domenic
Если я скопирую код именно так, как вы предоставили, он будет копировать первый выбранный элемент в строку 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' –