Controalele (Controls) pot fi utilizate și în afara formularelor. În exemplul următor, vom folosi controalele direct pe foaia de lucru.
Rețineți că „Modul Designer” („Design mode”) trebuie activat pentru a modifica un anumit control aflat pe foaia de lucru (și trebuie de asemenea dezactivat pentru a utiliza acest control).
Înainte de a privi următorul exemplu, să ne uităm la acesta:
Acum, dorim să adăugăm o culoare de fundal celulelor și să le selectăm în funcție de poziția glisorului într-o zonă definită de 30 de rânduri pe 10 coloane.
Proprietățile glisorului vertical pentru derularea ecranului sunt următoarele:
Glisorul orizontal este același, cu excepția Max : 10.
Următorul este codul care va rula ori de câte ori valoarea glisorului vertical (Value) se schimbă:
'Fundal gri în celule Cells.Interior.Color = RGB(240, 240, 240) 'Aplicăm culoare și selectăm o celulă With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Definiți celula folosind Valoare (Value) .Interior.Color = RGB(255, 220, 100) 'Folosim culoarea portocalie .Select 'Selectăm o celulă End With
Acest cod este declanșat atunci când apar evenimentele Change și Scroll și execută instrucțiuni indiferent de partea pe care am făcut clic pe glisor.
Următorul este codul pentru glisorul vertical:
Private Sub vertical_bar() 'Aplicați un fundal gri pentru celule Cells.Interior.Color = RGB(240, 240, 240) 'Aplicați fundalul și selectați celula With Cells(ScrollBar_vertical.Value, ActiveCell.Column) .Interior.Color = RGB(255, 220, 100) 'Portocale .Select 'Selectăm o celulă End With End Sub Private Sub ScrollBar_vertical_Change() vertical_bar End Sub Private Sub ScrollBar_vertical_Scroll() vertical_bar End Sub
Și iată, la rândul său, codul pentru glisorul orizontal:
Private Sub horizontal_bar() 'Aplicați un fundal gri pentru celule Cells.Interior.Color = RGB(240, 240, 240) 'Aplicați fundalul și selectați celula With Cells(ActiveCell.Row, ScrollBar_horizontal.Value) .Interior.Color = RGB(255, 220, 100) 'Portocale .Select 'Selectăm o celulă End With End Sub Private Sub ScrollBar_horizontal_Change() horizontal_bar End Sub Private Sub ScrollBar_horizontal_Scroll() horizontal_bar End Sub
Acesta este punctul de plecare pentru următorul nostru exemplu:
Puteți descărca fișierul exemplu Excel: userform4.xls
Când rulăm formularul, dorim ca cele 4 țări să fie încărcate în lista verticală (folosind metoda AddItem):
Private Sub UserForm_Initialize() For i = 1 To 4 '=> pentru a umple 4 țări ComboBox_Country.AddItem Cells(1, i) 'Adăugăm valorile celulelor de la A1 la A4 folosind o buclă Next End Sub
Când valoarea meniului derulant se modifică, dorim să adăugăm orașele țării selectate folosind o buclă similară celei precedente.
Pentru a face acest lucru, trebuie să cunoaștem numărul coloanei, precum și numărul de orașe (rânduri) din această coloană.
Proprietatea ListIndex conține numărul de secvență al elementului selectat din lista verticală (spre deosebire de Value, care conține valoarea articolului din listă). Rețineți că ListIndex începe cu numărul 0.
Numărul coloanei se obține prin:
column_number = ComboBox_Country.ListIndex + 1
Pentru a obține numărul de rânduri din coloana selectată pentru o anumită țară, putem găsi numărul ultimei celule nevide:
rows_number = Cells(1, column_number).End(xlDown).Row
Folosind aceste informații, acum este posibil să creați o buclă pentru a adăuga orașele pe listă:
Private Sub ComboBox_Country_Change() 'Ștergerea listei (în caz contrar, orașele vor fi adăugate imediat) ListBox_Cities.Clear Dim column_number As Integer, rows_number As Integer 'Numărul de secvență al elementului selectat (ListIndex începe cu 0): column_number = ComboBox_Country.ListIndex + 1 'Numărul de rânduri din coloana selectată cu țări: rows_number = Cells(1, column_number).End(xlDown).Row For i = 2 To rows_number '=> completarea listei cu orașe ListBox_Cities.AddItem Cells(i, column_number) Next End Sub
Notă: Am putea scurta codul, dar asta l-ar face mai puțin lizibil:
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
Orașul pe care îl alegem va fi introdus în câmpul de text „Alegere” (“Choice”):
Private Sub ListBox_Cities_Click() TextBox_Choice.Value = ListBox_Cities.Value End Sub
Puteți vedea un exemplu terminat în acest fișier Excel: userform4b.xls