Kontroli (Controls) można używać także poza formularzami. W poniższym przykładzie użyjemy kontrolek bezpośrednio w arkuszu.
Należy pamiętać, że „Tryb projektanta” („Design mode”) musi być aktywowany, aby móc modyfikować konkretną kontrolkę znajdującą się w arkuszu (i musi być również dezaktywowany, aby móc korzystać z tej kontrolki).
Zanim przejdziemy do następnego przykładu, spójrzmy na to:
Teraz chcemy dodać kolor tła do komórek i wybrać je na podstawie położenia suwaka w określonym obszarze 30 wierszy na 10 kolumn.
Właściwości pionowego suwaka służącego do przewijania ekranu są następujące:
Suwak poziomy jest taki sam, z wyjątkiem Max : 10.
Poniżej znajduje się kod, który zostanie uruchomiony za każdym razem, gdy zmieni się wartość pionowego suwaka (Value):
'Szare tło w komórkach Cells.Interior.Color = RGB(240, 240, 240) 'Nakładamy kolor i wybieramy komórkę With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Zdefiniuj komórkę za pomocą wartości (Value) .Interior.Color = RGB(255, 220, 100) 'Używamy koloru pomarańczowego .Select 'Wybieramy komórkę End With
Ten kod jest wyzwalany, gdy wystąpią zdarzenia Change i Scroll i wykonuje instrukcje niezależnie od tego, którą część suwaka kliknęliśmy.
Poniżej znajduje się kod suwaka pionowego:
Private Sub vertical_bar() 'Zastosuj szare tło dla komórek Cells.Interior.Color = RGB(240, 240, 240) 'Zastosuj tło i wybierz komórkę With Cells(ScrollBar_vertical.Value, ActiveCell.Column) .Interior.Color = RGB(255, 220, 100) 'Pomarańczowy .Select 'Wybieramy komórkę End With End Sub Private Sub ScrollBar_vertical_Change() vertical_bar End Sub Private Sub ScrollBar_vertical_Scroll() vertical_bar End Sub
A oto z kolei kod suwaka poziomego:
Private Sub horizontal_bar() 'Zastosuj szare tło dla komórek Cells.Interior.Color = RGB(240, 240, 240) 'Zastosuj tło i wybierz komórkę With Cells(ActiveCell.Row, ScrollBar_horizontal.Value) .Interior.Color = RGB(255, 220, 100) 'Pomarańczowy .Select 'Wybieramy komórkę End With End Sub Private Sub ScrollBar_horizontal_Change() horizontal_bar End Sub Private Sub ScrollBar_horizontal_Scroll() horizontal_bar End Sub
To jest punkt wyjścia dla naszego następnego przykładu:
Możesz pobrać przykładowy plik Excel: userform4.xls
Chcemy, aby przy uruchomieniu formularza na listę rozwijaną wczytały się 4 kraje (przy pomocy metody AddItem):
Private Sub UserForm_Initialize() For i = 1 To 4 '=> aby wypełnić 4 kraje ComboBox_Country.AddItem Cells(1, i) 'Wartości komórek od A1 do A4 dodajemy za pomocą pętli Next End Sub
Kiedy wartość rozwijanego menu ulegnie zmianie, chcemy dodać miasta wybranego kraju za pomocą pętli podobnej do poprzedniej.
Aby to zrobić, musimy znać numer kolumny, a także liczbę miast (wierszy) w tej kolumnie.
Właściwość ListIndex zawiera numer kolejny wybranego elementu z listy rozwijanej (w przeciwieństwie do właściwości Value, która zawiera wartość elementu listy). Należy pamiętać, że ListIndex zaczyna się od cyfry 0.
Numer kolumny uzyskuje się poprzez:
column_number = ComboBox_Country.ListIndex + 1
Aby uzyskać liczbę wierszy w wybranej kolumnie dla konkretnego kraju, możemy znaleźć numer ostatniej niepustej komórki:
rows_number = Cells(1, column_number).End(xlDown).Row
Korzystając z tych informacji, można teraz utworzyć pętlę dodającą miasta do listy:
Private Sub ComboBox_Country_Change() 'Czyszczenie listy (w przeciwnym razie miasta zostaną dodane od razu) ListBox_Cities.Clear Dim column_number As Integer, rows_number As Integer 'Numer kolejny wybranego elementu (ListIndex zaczyna się od 0): column_number = ComboBox_Country.ListIndex + 1 'Liczba wierszy w wybranej kolumnie z krajami: rows_number = Cells(1, column_number).End(xlDown).Row For i = 2 To rows_number '=> wypełnienie listy miastami ListBox_Cities.AddItem Cells(i, column_number) Next End Sub
Uwaga: Moglibyśmy skrócić kod, ale byłoby to mniej czytelne:
Private Sub ComboBox_Country_Change() ListBox_Cities.Clear For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1) Next End Sub
Wybrane przez nas miasto zostanie wpisane w polu tekstowym „Wybór” („Choice”):
Private Sub ListBox_Cities_Click() TextBox_Choice.Value = ListBox_Cities.Value End Sub
Gotowy przykład możesz zobaczyć w tym pliku Excel: userform4b.xls