Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизация мультивыбора в listBox / 11 сообщений из 11, страница 1 из 1
05.06.2015, 15:49
    #38977555
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Добрый день

У меня есть заполненный список listBox1 на userform

Я хочу выбрать от туда несколько элементов и добавить их в таблицу, на новые строки.
Вот у меня получается дубляж.
в одном варианте, когда я уже выбрал и нажал кнопку, добавить выбранные элементы, то после операции в ListBox1 эти элементы остаются и можно их выбрать снова и они снова "добавятся" и это не хорошо, получится дубляж.

Я вижу два варианта решения, но оба они не идеальны.
1. ListBox1.RemoveItem ListBox1.ListIndex - но в этом случаи когда я выбираю два элемента - я получаю ошибку. Если один то нормально. А у меня мульти выбор.
2. закрыть форму вместе с кнопкой и листбоксом - Unload UserForm1. Сделал выбор, нажал кнопку и форма сама закрылась. И самое главное ListBox1 заполняется как раз при обращении к UserForm_Initialize() и при повторном открытии выбранных ранее элементов в ListBox1 уже не будет.
Но в этом случаи происходит за двоение. Цикл срабатывает почему то дважды, при выборе 1 элемента из списка listBox1.

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

код самого цикла выбора элемента на ListBox1
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
For p = 0 To ListBox1.ListCount - 1 ' цикл по всем имеющимся значениям в списке listbox1
     If ListBox1.Selected(p) Then 
        
        sp = ListBox1.List(p) 'присваееваем sp значение из listbox1
        Cells(n + 10, 1).EntireRow.Select ' выделяем строку
        Selection.Copy
        'Selection.Insert Shift:=xlDown
        MP.Cells(n + 11, 4) = sp ' добавляем выбранное значение из listbox1 (sp)
        Unload UserForm1 
     End If
Next p
...
Рейтинг: 0 / 0
05.06.2015, 16:07
    #38977583
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
lopuxi1. ListBox1.RemoveItem ListBox1.ListIndex - но в этом случаи когда я выбираю два элемента - я получаю ошибку. Если один то нормально. А у меня мульти выбор.Почему просто в цикле не удалить ненужные элементы?
...
Рейтинг: 0 / 0
05.06.2015, 16:10
    #38977588
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Shocker.Pro,

Лишние это какие?
если только переделать строку
Код: vbnet
1.
Cells(n + 10, 1).EntireRow.Copy 


остальные не уберешь.
...
Рейтинг: 0 / 0
05.06.2015, 16:13
    #38977592
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Shocker.Pro,

Стоп. Не правильно прочитал.
В цикле удалить не нужные элементы? А как?
Если я использую
ListBox1.RemoveItem ListBox1.ListIndex
То он удаляет эти выделенные в listBox элементы. И на этом моменте цикл выдает ошибку.
...
Рейтинг: 0 / 0
05.06.2015, 16:19
    #38977606
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
ListBox1.ListIndex - это не выделенные элементы, это индекс элемента, на котором стоит курсор
...
Рейтинг: 0 / 0
05.06.2015, 16:29
    #38977620
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Shocker.Pro,

Я пробовал и так ListBox1.RemoveItem (p)
удалять элементы по отдельности. Но ошибку это не исправило. Как я понимаю причина в том что убрав элемент в первом шаге цикла, я сбиваю его на втором. Так как именно на вторичном запуске, он выдает ошибку.
...
Рейтинг: 0 / 0
05.06.2015, 16:30
    #38977622
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
удалять надо с конца
...
Рейтинг: 0 / 0
05.06.2015, 16:32
    #38977625
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Освой свойство ItemData

И таки да - если ты удаляешь элементы цикла в процессе обработки их циклом, то конечно нужно думать об изменении параметров цикла. Ну или просто устроить цикла с конца к началу.
...
Рейтинг: 0 / 0
05.06.2015, 19:15
    #38977772
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Shocker.Pro,

что-то у меня ни чего не получилось (

Попытался от последнего, выделенные элементы удалить. А цикл даже не запускается.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
For Item = ListBox1.ListCount - 1 To 0 Step 1
    MsgBox "Item = " & Item & " p = " & p
    If ListBox1.Selected(Item) Then
        MsgBox "Item = " & Item & "p = " & p
        'ListBox1.RemoveItem Item
    End If
Next Item



мой мозг на сегодня походу дела умер.))
...
Рейтинг: 0 / 0
05.06.2015, 19:42
    #38977791
Дмит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Step -1
...
Рейтинг: 0 / 0
08.06.2015, 10:32
    #38978723
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация мультивыбора в listBox
Дмит,

СПАСИБО!!!!
Как все просто оказалось)
Теперь работает)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизация мультивыбора в listBox / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]