Страницы: 1 2 След.
RSS
Изменение списка Listbox с удалением строк таблицы-источника
 
Доброго времени суток, уважаемые форумчане. Не смог воплотить идею с удалением значений в Listbox с мультивыбором (знаний не хватает). Во вложений файл "Пример1" где есть мультивыбор значений для дальнейшего выделения через UserForm (нажав кнопку "Ок"), столкнулся с двумя проблемами для меня:

1. Как сделать чтобы вместо "выделения" значений, можно было их удалить.
2. Как сделать чтобы список в Listbox подтягивался всегда с определенного листа (Как в примере2 вложил для примера.) Сейчас он подтягивает с активного листа. То есть надо чтобы он файле "Пример1" подтягивал с Листа1 при вызове формы на Листе2.

Спасибо за участие. Файлы прилагаю.  
 
Один вопрос - одна тема. Комплексно - в другом разделе - Работа
 
vikttur,  думаю если бы я спросил как в примере2 сделать мультивыбор как в примере1, но с удалением это был 1 вопрос. В любом случае спасибо за внимание.
 
Для удаления строк из листбокса необходимо отказаться от ссылки на список и заполнить значениями
Код
        .List = rng.Value
'        .RowSource = rng.Address
тогда удалять можно, например, по дубльклику
Код
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    ListBox1.RemoveItem (ListBox1.ListIndex)
End Sub
догадайся с трёх раз что надо поменять что бы брал с другого листа
Код
Set rng = ActiveSheet.UsedRange
 
Александр Моторин, сейчас сижу с сотки.  Как буду за ПК попробую. Я пробовал писать  Worksheets("Лист1").UsedRange не помогло. Заменил везде где ссылка на AktiveSheet. Спасибо за помощь.
Изменено: Ov198 - 30.09.2018 00:28:22
 
Александр Моторин, еще раз спасибо за помощь, небольшая ремарка. Ваш код удаляет значение в Listbox, а хотелось бы на самом листе))
 
Находим на листе выделенную в ЛистБокс позицию, удаляем эту строку на листе, перезаписываем содержимое ЛистБокс.
 
Цитата
Ov198 написал:
сейчас сижу с сотки
, а я с полтинника, это же надо так написать.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
:D  
 
Юрий М, добрый день. Если удобно  Вас попросить о помощи. Пытаюсь который день оживить кнопку "Удаление" не выходит. Уже вроде все что мог перепробовал. (нашел на форуме подобный вопрос https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=64170 ), но к сожалению не разобрался. Пробовал переделать с "примера1" (вложен выше) макрос и вместо выделения сделать удаление, но он почему т удаляет у меня в файле на одну строку выше (хотя тот код я тоже к моему стыду не очень понимаю). Сделал новый файл. Спасибо за внимание. Все что хотел реализовал, но вот удаление не дается (нужно чтобы удалялась строки одна или несколько в таблице по выбору в Listbox).  
Изменено: Ov198 - 02.10.2018 08:07:41
 
Alemox, бывает у нас так говорят = )
 
Удалить нужно выбранные в listbox-е?
"Все гениальное просто, а все простое гениально!!!"
 
Сейчас посмотреть не могу - на работе. По поводу "на строку выше": нумерация строк начинается с нуля - может поэтому?
 
Nordheim, и в таблице тоже. Спасибо.
 
Юрий М, вот попробовал такой код (пробовал цифровые значения заменить не вышло ничего путного),  не стал его в файл выгружать т.к. изменения должны быть не на активном листе, а всегда в "умной таблице" ("Базис_tb") на листе "Справочная_базис" и думаю это не оптимальный код, думал если найдется решение с удалением то дальше уже сам. Извините что отвлекаю от работы. Надеюсь сможете помочь. Спасибо.
Код
 Private Sub CommandButton3_Click()

    Dim RowRange As Range
    Dim RowCnt As Integer
    Dim r As Integer
    
    RowCnt = 0
    For r = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(r) Then
            RowCnt = RowCnt + 1
            If RowCnt = 1 Then
                Set RowRange = ActiveSheet.UsedRange.Rows(r + 1)
            Else
                Set RowRange = Union(RowRange, ActiveSheet.UsedRange.Rows(r + 1))
            End If
        End If
    Next r
    If Not RowRange Is Nothing Then RowRange.Select
    Selection.Delete Shift:=xlUp
    
    Unload Me
End Sub
Изменено: Ov198 - 02.10.2018 10:57:06
 
Но я бы заполнял массив не через RowSource, а через ListBox.List = arr либо ListBox1.AddItem.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, Nordheim, спасибо за вариант. Но к сожалению если выбрать более одного значения он удаляет только первое.  Подскажите обязательно процедуру делать с применением модуля класса?! Никогда не сталкивался.
Изменено: Ov198 - 02.10.2018 09:04:10
 
Цитата
Ov198 написал:
Подскажите обязательно процедуру делать с применением модуля класса
Не конечно, это моя инициатива.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, а все же возможно ведь удалить сразу несколько позиций по выбору?! Случайно не знаете как = )
 
А такой вариант.
"Все гениальное просто, а все простое гениально!!!"
 
Ov198, оформите код в сообщении #15 тегом <...>: должно получится так:
Код
Sub test
    Dim a
    ....
    ....
End Sub
 
Nordheim, спасибо за Ваше участие, возникает маленькая ремарка с тем что удаляются значения в таблице, а строки сохраняются, тем самым после повторного вызова формы она выдает пустоты. Хотелось бы чтобы строки удалялись. Еще раз спасибо.
 
Михаил С., спасибо. Исправил.
 
Поищите удпление строки, привяжите к макросу... Или Вы все сопутствующие вопросы - в одну тему?
 
В примере таблица состоит из одного столбца удаляются те данные которые Вы выделяете остальные возвращаются обратно на лист и соответственно в Listbox, если у вас данные находятся в нескольких столбцах то и пример должен быть соответствующий. Первоначальный вариант будет работать, если данные в ListBox вносить не через RowSource. Попробуйте и у Вас получится, я в Вас верю.
Изменено: Nordheim - 02.10.2018 11:01:18
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, данные в одном столбце. Я удалил через Ваш пример значение "Восток" вот что вышло: значение удалилось, а строка осталась и при повторном вызове, выдается пустота.  
Изменено: Ov198 - 02.10.2018 11:05:38
 
Цитата
Nordheim написал: Удалить нужно выбранные в listbox-е?
Цитата
Ov198 написал: и в таблице тоже
Вот удалите вы все строки в таблице - и что дальше?, как в следующий раз?, пустая таблица?
 
какой вариант первый или второй? Какой алгоритм заполнения элемента ListBox?
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, извините должен был сразу вложить файл с алгоритмам заполнения. Заполняется через ту же форму, только кнопкой ввода через textbox. Надеюсь я Вам не надоел.
 
Михаил С., вложение в сообщений №29. Спасибо за внимание. Там реализована идея заполнения.
Страницы: 1 2 След.
Наверх