Страницы: 1
RSS
Выделение нескольких строк в таблице через форму, Не знаю, как выделить несколько строк в основной таблице, используя listbox multiselect extended
 
Приветствую вас, уважаемые эксперты!
Помогите пожалуйста решить вопрос с выделением строк в таблице.
Имеется условная таблица, на основе которой создается форма с listbox. По событию change могу выделять по одной строке в основной таблице, но очень бы хотелось иметь возможность выделить множество строк, причем непоследовательно.
Как добавить к уже выделенному диапазону новое выделение, не снимая старого?



Код
Option Explicit
Public Таблица1 As ListObject

Private Sub ListBox1_Change()
    Dim i As Integer
    
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            Таблица1.ListRows(i + 1).Range.Select
        End If
    Next
End Sub

Private Sub UserForm_Initialize()

    Set Таблица1 = ThisWorkbook.Worksheets("Лист1").ListObjects("Таблица1")
        
    With ListBox1
        ListBox1.Clear
        Dim i As Integer
        For i = 1 To Таблица1.ListRows.Count
            .AddItem
            .Column(0, .ListCount - 1) = Таблица1.DataBodyRange(i, 2)
            .Column(1, .ListCount - 1) = Таблица1.DataBodyRange(i, 4)
        Next
    End With
    
End Sub
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Так?
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, так. Большое спасибо!
Не могли бы пожалуйста пояснить код?
Просто я несколько дней уже бился с этой задачей, пытался записывать выделенные строки в массив, а потом его выделять, результата так и не получил.
А тут такая короткая запись и так хорошо работает.
Изменено: Valo - 28.01.2019 20:13:29
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Я не большой мастер объяснять, вот описал как смог.
Скрытый текст
Изменено: Nordheim - 28.01.2019 20:26:07
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, кажется понял!
При новом выделении в listbox, сначала выполняется
Код
Set rng = Range("a" & i + 2).Resize(, 4)
Затем, так как rng не пустой - происходят объедения с существующем rng.

Еще раз большое спасибо!
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Цитата
Valo написал: Nordheim , кажется понял!
Да, все так.
Цитата
Valo написал:Еще раз большое спасибо!
Пожалуйста.  :D
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх