Excel VBA – sprawdzanie, czy pozycja widnieje już na liście (ListBox)

No Comments

Kolejny szybki snippet, aby się nie znudzić za bardzo.
Często zdarza się, że wybieramy w jednym ListBoksie jakieś pozycje i kopiujemy je do drugiego. Nie chcielibyśmy się zdublować (zazwyczaj), dlatego też warto sprawdzić przed skopiowaniem, czy dany element na naszej liście już widnieje, czy może też nie. Posłuży do tego kolejna uniwersalna funkcja…

Przycisk przy jednym z ListBoksów posiada sobie jakiś kod w stylu:

Private Sub copyFromOneToAnother_Click()
    Dim tmp(0 To 4) As String
    'tutaj może być przypisanie elementy z ListBoksa, lub skądkolwiek...

    If Not isOnTheList(theList, tmp) Then
        theList.AddItem (tmp(0))
        For a = 1 To UBound(tmp)
            theList.List(theList.ListCount - 1, a) = tmp(a)
        Next
    End If
End Sub

No dobrze, to czas zająć się tą nieszczęsną funkcją. Na szczęście, jej zawartość jest trywialna:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function isOnTheList(myList As MSForms.ListBox, element() As String) As Boolean
    If UBound(element) - LBound(element) + 1 <> myList.ColumnCount Then
        MsgBox "Niepoprawne wywołanie, zastrzel programistę...", vbExclamation
    End If
 
    For a = 0 To myList.ListCount - 1
        isOnTheList = True
        For b = LBound(element) To UBound(element)
            If myList.List(a, b - LBound(element)) <> element(b) Then
                isOnTheList = False
                Exit For 'jedna kolumna wystarczy
            End If
        Next
        If isOnTheList = True Then 'po co dluzej sprawdzac?
            Exit For
        End If
    Next
End Function

Przypominam zwyczajowo o deklarowaniu MSForms!

Leave a Reply

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