W Excelu warto eksperymentować i wdrażać w życie twórcze pomysły. Czasami przy niewielkim wysiłku można stworzyć narzędzie, które pozwala na dużą elastyczność w analizowaniu danych. Sterowanie typem wykresu za pomocą kontrolki ComboBox z pewnością do takich się zalicza.
Potęga kontrolek
W rozbudowanych aplikacjach, interfejs oparty jest na formularzach użytkownika. W przypadku prostych plików – wykorzystuje się rozwiązania bez VBA.
Pewnych kompromisem jest użycie wbudowanych kontrolek arkusza. Można je podzielić na: formanty formularza i formanty ActiveX.
Do dyspozycji mamy całą gamę kontrolek i tylko od naszej kreatywności zależy w jaki sposób je wykorzystamy.
Zmiana typu wykresu
Sterowanie typem wykresu jest narzędziem, w którym wykorzystujemy kontrolkę ComboBox.
Listą dla pola kombi są dane zawarte w zakresie B3:B8, czyli nazwy różnych wykresów.
Naszą intencją jest to, aby wybierając nazwę wykresu na polu kombi, automatycznie zmienił się jego typ.
Od czego zacząć?
Skoro mamy już listę załadowaną do pola kombi, to potrzebujemy makra, które pobierze wartość formantu i zamieni ją na odpowiedni typ wykresu.
Kod VBA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Private Const msMODUL As String = "Module1" Option Explicit Public Sub ZmienWykres() Dim objWykres As ChartObject ' Wykres znajdujący się w arkuszu "wksWykres" Dim iWybranaPozycja As Integer ' Pozycja typu wykresu na liście DropDown Const sWYKRES_NAZWA As String = "MojWykres" ' Nazwę wykresu Const sPROC As String = "ZmienWykres" 'Aktywuj obsługę błędów na starcie 1 On Error GoTo ObslugaBledu 'Przypisz zmienną do wykresu 2 Set objWykres = wksWykres.ChartObjects(sWYKRES_NAZWA) 'Sprawdź pozycję wybraną na polu kombi 3 iWybranaPozycja = wksWykres.DropDowns(1).ListIndex 4 Select Case iWybranaPozycja: Case 1: objWykres.Chart.ChartType = xlLine 'Liniowy 5 Case 2: objWykres.Chart.ChartType = xlPie 'Kołowy 6 Case 3: objWykres.Chart.ChartType = xlRadar 'Radarowy 7 Case 4: objWykres.Chart.ChartType = xlArea 'Powierzchniowy 8 Case 5: objWykres.Chart.ChartType = xlColumnClustered 'Kolumnowy 9 Case 6: objWykres.Chart.ChartType = xlXYScatter 'Punktowy 10 End Select 'Wyświetl odpowiednią nazwę wykresu 11 objWykres.Chart.ChartTitle.Text = "Wykres " & _ wksWykres.DropDowns(1).List(iWybranaPozycja) Wyjscie: 12 Set objWykres = Nothing 13 On Error GoTo 0 14 Exit Sub ObslugaBledu: 'If gbDEBUG_TRYB Then Stop 15 MsgBox "Wystąpił błąd nr " & Err.Number & " (" & Err.Description & ")." _ & vbCr & vbCr & "Linia kodu nr " & Erl & " w procedurze """ & _ sPROC & """ modułu """ & msMODUL & """.", vbInformation, "BŁĄD!" 16 Resume Wyjscie End Sub |
Analiza kodu
- Najpierw pobieram pozycję wybranego tekstu na formancie. Pierwsze na liście jest słowo Liniowy, drugie Kołowy, trzecie Radarowy itd. Tak naprawdę jest to właściwość ListIndex, którą możemy znać z kontrolek ActiveX. Różnica polega na tym, że tutaj indeksowanie zaczynamy od 1, natomiast w przypadku kontrolek ActiveX pozycja pierwszej wartości na liście to 0.
- Zmieniam typ wykresu. Za pomocą instrukcji Select Case sprawdzam pozycję wybranego tekstu z typem wykresu.
- Pobieram wybrany tekst w polu kombi. Tutaj niestety nie mamy właściwości Value – musimy kombinować przez List i ListIndex. W ten sposób typ wykresu staje się nazwą wykresu.