Excel VBA – sprawdzanie, czy pozycja widnieje już na liście (ListBox)
maj 11th, 2010. Brak komentarzy.
Kategorie: Excel, Software, Visual Basic, Zabawy z kodem.
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!