powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизация мультивыбора в listBox
11 сообщений из 11, страница 1 из 1
Оптимизация мультивыбора в listBox
    #38977555
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

У меня есть заполненный список 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
Оптимизация мультивыбора в listBox
    #38977583
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lopuxi1. ListBox1.RemoveItem ListBox1.ListIndex - но в этом случаи когда я выбираю два элемента - я получаю ошибку. Если один то нормально. А у меня мульти выбор.Почему просто в цикле не удалить ненужные элементы?
...
Рейтинг: 0 / 0
Оптимизация мультивыбора в listBox
    #38977588
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

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


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

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

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

И таки да - если ты удаляешь элементы цикла в процессе обработки их циклом, то конечно нужно думать об изменении параметров цикла. Ну или просто устроить цикла с конца к началу.
...
Рейтинг: 0 / 0
Оптимизация мультивыбора в listBox
    #38977772
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Оптимизация мультивыбора в listBox
    #38977791
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Step -1
...
Рейтинг: 0 / 0
Оптимизация мультивыбора в listBox
    #38978723
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмит,

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


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