VBA Макросы: Как передвинуть выделенный элемент в listbox?

Автор Посетитель, 18 сентября 2017, 19:59

Посетитель

Помогите пожалуйста решить такую задачу:
есть заполненный listbox. Как с помощью кнопок на форме передвинуть выделенный элемент listbox вверх или вниз?

Администратор

Кнопки для запуска макроса нет, я запускал из VBA.

Макрос
Private Sub UserForm_Initialize()
   
    Dim i As Long
   
    ' Заполнение листбокса данными.
    For i = 1 To 5
        Me.ListBox1.AddItem "ячейка " & i & ",1"
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = "ячейка " & i & ",2"
    Next i
   
End Sub

Private Sub cmdUP_Click()

    Dim arr(1 To 2), index As Long

    ' ListIndex - это порядковый номер выделенной строки.
    ' Если выделена первая строка, то двигать не надо.
    If Me.ListBox1.ListIndex = 0 Then
        Exit Sub
    End If
    ' Запись порядкового номера выделенной строки.
    index = Me.ListBox1.ListIndex
    ' Запоминание данных в выделенной строке.
    ' Данные записываются в массив.
    arr(1) = Me.ListBox1.List(index, 0)
    arr(2) = Me.ListBox1.List(index, 1)
    ' Удаление выделенной строки.
    Me.ListBox1.RemoveItem index
    ' Создание новой строки и запись в неё данных из массива.
    Me.ListBox1.AddItem arr(1), index - 1
    Me.ListBox1.List(index - 1, 1) = arr(2)
    ' Выделение вставленной строки.
    Me.ListBox1.Selected(index - 1) = True
   
End Sub

Private Sub cmdDown_Click()
    Dim arr(1 To 2), index As Long

    ' Если выделена последняя строка, то двигать не надо.
    If Me.ListBox1.ListIndex = Me.ListBox1.ListCount - 1 Then
        Exit Sub
    End If
    ' Запись порядкового номера выделенной строки.
    index = Me.ListBox1.ListIndex
    ' Запоминание данных в выделенной строке.
    ' Данные записываются в массив.
    arr(1) = Me.ListBox1.List(index, 0)
    arr(2) = Me.ListBox1.List(index, 1)
    ' Удаление выделенной строки.
    Me.ListBox1.RemoveItem index
    ' Создание новой строки и запись в неё данных из массива.
    Me.ListBox1.AddItem arr(1), index + 1
    Me.ListBox1.List(index + 1, 1) = arr(2)
    ' Выделение вставленной строки.
    Me.ListBox1.Selected(index + 1) = True

End Sub
[свернуть]

[вложение удалено администратором]

Посетитель

Большущее спасибо! Проверил на своей форме - работает!