CC1 – TabStrip
TabStrip to kontrolka ActiveX z zestawu biblioteki Common Controls 1 (plik mscomctl.ocx) dla kompilacji Office 32/64 bit.
Gdy brakuje miejsca na naszej formie możemy się posłużyć kontrolką TabStrip. Posiada ona bardzo fajną funkcjonalność ponieważ można w niej prezentować dane w sposób katalogowy tworząc dowolną ilość zakładek bądź przycisków. Zakładki te nie musza być w górnej części, ponieważ nie zawsze jest to praktyczne rozwiązanie, a np z boku informując o etapach realizacji działań.
W ustawieniach (Custom) kontrolki możemy przestawić i zapamiętać właściwości kontrolki. Za przestawianie położenia kart odpowiada parametr Placement. Kontrolka współpracuje z ImageList, aby w połączeniu z indeksem tych kontrolek przenieść zachowane w niej zdjęcia do zakładek TabStripa. To główna zaleta w odróżnieniu funkcjonalności takiej samej kontrolki pochodzącej z zestawu FM20. Godne zwrócenia uwagi są parametry HotTracking, która po kliknięciu na zakładkę powoduje zamianę miejsc, a Style za zamianę widoku kart na przyciski (płaskie bądź wypukle). W drugiej części konfiguratora możemy utworzyć zakładki definiując ich nazwy jak i określając klucz, Identyfikacyjne pole dodatkowe oraz opis w chmurce.
Tworzenie zakładek kontrolki: Spróbujmy zatem utworzyć np taką formę, która będzie zawierała dane zgodnie z naszymi danymi w arkuszu Excela. Przyjmijmy zatem iż w arkuszu znajduje się lista osób rozpoznanych po pierwszej literze nazwiska. Następnie do umieszczonego obok Textboxa zaimportujmy sobie dane tych osób. Listę pobrałem ze zbioru rzeczników patentowych, gdzie w kolumnie G znajduje się dana unieważniająca uprawnienia. Opuścimy te nazwiska i imporcie:
Wielkość kontrolki determinuje ilość zakładek, ponieważ w przeciwieństwie do Multipage (FM20)[/i[, nie operujemy na przestrzeni należącej do zakładki, w której możemy osadzić inną kontrolkę, a jedynie korzystamy z jej właściwości Caption lub Key po kliknięciu.
Private Sub UserForm_Initialize()
Dim x&, max_r&: max_r = Cells(Rows.Count, "a").End(xlUp).Row
Dim NoDupes As New Collection, l$, i%, j%, Swap1$, Swap2$
For x = 2 To max_r 'pętla po wszystkich pozycja po nagłówku
If Len(Cells(x, "g")) = 0 Then 'warunek jeśli brak wartości w kolumnie G
On Error Resume Next 'olewajka
l = Left(Cells(x, "c"), 1) 'zapisywanie do zmiennej tylko pierwszej litery
NoDupes.Add l, CStr(l) 'dodawanie do kolekcji bez duplikatów
End If
Next
On Error GoTo 0 'wycofanie olewajki
For i = 1 To NoDupes.Count - 1 'sortowanie bąbelkowe
For j = i + 1 To NoDupes.Count
If NoDupes(i) > NoDupes(j) Then
Swap1 = NoDupes(i)
Swap2 = NoDupes(j)
NoDupes.Add Swap1, before:=j
NoDupes.Add Swap2, before:=i
NoDupes.Remove i + 1
NoDupes.Remove j + 1
End If
Next j
Next i
TabStrip1.Placement = 2 'ustawienie kontrolki 3 linie
TabStrip1.Style = tabTabs
TabStrip1.TabWidthStyle = tabJustified
For x = 1 To NoDupes.Count
TabStrip1.Tabs.Add x, "T" & x, NoDupes(x) 'dodanie elementów kolekcji do kontrolki
Next
TabStrip1_Click
End Sub
Private Sub TabStrip1_Click()
Dim x&, max_r&: max_r = Cells(Rows.Count, "a").End(xlUp).Row
Dim lista$
For x = 2 To max_r
If Len(Cells(x, "g")) = 0 And _
Left(Cells(x, "c"), 1) = TabStrip1.SelectedItem.Caption Then
lista = lista & Cells(x, "c") & " " & Cells(x, "b") & vbNewLine
End If
Next
TextBox1.MultiLine = True
ox1.Text = lista
End Sub
Jeżeli jeszcze zastąpimy zakładki w czytelne ikony to może to zastąpić dynamiczne Menu. Spróbujemy?
A więc nowa forma i rysujemy. Wypełniam zatem kontrolkę [i]ImageList obrazkami i ładuje do TabStrip kodem:
Private Sub UserForm_Initialize()
Dim x%
TabStrip1.Style = tabButtons
TabStrip1.MultiRow = True
TabStrip1.ImageList = Me.ImageList1
TabStrip1.Tabs.Clear
With ImageList1.ListImages
For x = 1 To .Count
TabStrip1.Tabs.Add x, "T" & x, , x
Next
End With
End Sub
Jeśli uważasz że pokazane materiały są godne polecenia – podziel się tą wiadomością z innymi pozostawiając odnośnik to tego materiału.
(c) Shon Oskar – http://VBATools.pl
Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.