Excel VBA – obsługa elementów ListBox’a

4 Comments

Chcąc – nie chcąc, czasem trzeba. Jak widać, wpisy zostały zdominowane przez VBA, ale lepiej mieć content, niż nie mieć, więc dokładam znowu coś od siebie.

W dzisiejszym odcinku dowiemy się, jak wyciągnąć liczbę zaznaczonych elementów listy ListBox, jak wyciągnąć te elementy, jak dodać gotowy element do listy i na dokładkę – otrzymamy pierwszy zaznaczony element.

DISCLAIMER: (cokolwiek to znaczy) jestem świadomy, że przedstawiane tu rzeczy są trywialne aż do mdłości, ale skoro działają, mogę komuś ułatwić życie, przedstawiając je w formie krótkich snippetów.

Ilość zaznaczonych elementów listy

Dotyczy list o wlaściwości MultiSelect równej fmMultiSelectMulti lub fmMultiSelectExtended, przy single-select też zadziała, ale oczywiście zwróci 1.

1
2
3
4
5
6
7
8
Public Function countSelected(myList As MSForms.ListBox) As Integer
    countSelected = 0
    For a = 0 To myList.ListCount - 1
        If myList.Selected(a) Then
            countSelected = countSelected + 1
        End If
    Next
End Function

Pierwszy zaznaczony element listy

1
2
3
4
5
6
7
8
9
10
11
'jesli nic nie zaznaczono, zwroci -1, jesli zaznaczono, zwraca
'indeks zaznaczonego elementu
Public Function firstSelected(myList As MSForms.ListBox) As Integer
    firstSelected = -1
    For a = 0 To myList.ListCount - 1
        If myList.Selected(a) Then
            firstSelected = a
            Exit For 'po co sie meczyc dalej
        End If
    Next
End Function

Wszystkie zaznaczone elementy listy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
'zwraca tablice indeksow zaznaczonych elementow
Public Function allSelected(myList As MSForms.ListBox) As Integer()
    Dim returnArray() As Integer
    counter = 0
    For a = 0 To myList.ListCount - 1
        If myList.Selected(a) Then
            ReDim Preserve returnArray(counter)
            returnArray(UBound(returnArray)) = a
            counter = counter + 1
        End If
    Next
 
    allSelected = returnArray()
End Function

Dodawanie tablicy do listy

Ta funkcja jest ułatwieniem wyłącznie w przypadku wielokolumnowych list

1
2
3
4
5
6
7
8
9
10
11
12
Public Sub addToList(myList As MSForms.ListBox, element() As String)
    'jesli liczba kolumn nie zgadza sie z liczba pol tablicy:
    If UBound(element) - LBound(element) + 1 <> myList.ColumnCount Then
        MsgBox "Niepoprawne wywołanie, zastrzel programistę...", vbCritical + vbExclamation
        Exit Sub
    End If
 
    myList.AddItem (element(LBound(element)))
    For a = LBound(element) + 1 To UBound(element)
        myList.List(myList.ListCount - 1, a - LBound(element)) = element(a)
    Next
End Sub

Mam nadzieję, że Excelowo – VisualBasicowy cykl szybko się skończy, bo szlag mnie trafia, kiedy muszę pisać w języku, który za błąd uznaje średnik na końcu wiersza… :)

4 thoughts on “Excel VBA – obsługa elementów ListBox’a”

  1. Normalnie za ten kod :


    myList.AddItem (element(LBound(element)))
    For a = LBound(element) + 1 To UBound(element)
    myList.List(myList.ListCount – 1, a – LBound(element)) = element(a)
    Next

    Masz u mnie browara , dzięki.

  2. Witam
    ciekawa strona kursu VBA,
    lecz poszukuję więcej informacji na temat funkcji Check Box i Option Button, przede wszystkim do jakich celów je używać.

Leave a Reply

Your email address will not be published. Required fields are marked *