VBATools

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ń.

Obrazek

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.

Obrazek

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:

Obrazek

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:

Obrazek
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.