6135


Wykresy animowane

Excel potrafi wyświe­tlać proste animacje, na przykład animowane kształty i wykresy. Przeanalizujmy wykres XY pokazany na rysunku 1.

0x01 graphic

Rysunek 1. Prosta procedura w języku VBA przekształci ten wykres w ciekawą animację

Wartości X (kolumna A) zależą od wartości w komórce Al. Wartość w każdym kolejnym wierszu jest obliczana jako suma wartości z poprzedniego wiersza i wartości w komórce Al. Kolumna B zawiera formuły obliczające funkcję sinus dla wartości z kolumny A. Poniż­sza prosta procedura tworzy interesującą animację, modyfikując wartość w komórce Al, co powoduje zmianę wartości dla zakresów X i Y. W efekcie otrzymujemy efektowny wykres animowany.

Sub Animation1()

Dim i As Long

Range("A1") = 0

For i = 1 To 150

DoEvents

Range("A1") = Range("A1") + 0.035

DoEvents

Next i

Range("A1") = 0

End Sub

Kluczem do sukcesu podczas tworzenia wykresów animowanych jest zastosowanie jed­nego lub więcej poleceń DoEvents. Wykonanie tego polecenia powoduje chwilowe prze­kazanie sterowania do systemu operacyjnego, co w momencie powrotu sterowania do Excela powoduje (najwyraźniej...) aktualizację wykresu. Bez zastosowania poleceń DoEvents zmiany wykresu dokonywane wewnątrz pętli nie będą wy świetlane.

W skoroszyte Animacja_1.xlsm znajduje się przykład, zawierający nasz animowany wykres, oraz kilka innych przykładów animacji.

Przykład Animacja_Sin.xlsm - do samodzielnego wykonania.

Przewijanie wykresów

Na rysunku 2 przedstawiono wykres zawierający 5218 punktów danych w każdej serii. W skoroszycie zostały zdefiniowane następujące nazwy:

Range("$F$1").Name = "StartDay"

StartDay - nazwa dla komórki Fl.

Range("$F$2").Name = "NumDays"

NumDays - nazwa dla komórki F2.

Range("$F$3").Name = "Increment"

Increment - nazwa dla komórki F3 (wykorzystywanej do automatycznego przewijania).

Użycie nazw pozwala użytkownikowi na użycie wartości komórek przez Range("StartDay"), Range("NumDays"), Range("Increment").

Skoroszyt z tym przykładem - w pliku Przewianie.xlsm.

0x01 graphic

Rysunek 18.22. Wartośći w kolumnie F determinują dane prezentowane na wykresie

Przewijanie wykresu jest realizowane przez względnie proste makro. Przycisk umiesz­czony na arkuszu powoduje uruchomienie makra, które przewija wykres.

Sub AnimateChart()

Range("$F$1").Name = "StartDay"

Range("$F$2").Name = "NumDays"

Range("$F$3").Name = "Increment"

ActiveSheet.ChartObjects(1).Select

For r = Range("StartDay") To 5219 - Range("NumDays") _

Step Range("Increment")

DoEvents

zakres = "$A$" + CStr(Range("StartDay")) + ":$C$" _

+ CStr(Range("StartDay") + Range("NumDays"))

ActiveChart.SetSourceData Source:=Workbooks(1).Worksheets(1).Range(zakres)

`ActiveChart.SetSourceData Source:=Workbooks(1).Worksheets(1). _

`Range(Cells(Range("StartDay"), 1), Cells(Range("StartDay") + Range("NumDays"), 3))

DoEvents

Range("StartDay") = r

DoEvents

Next r

Range("$F$1").Value = 2

End Sub

Animacja realizowana jest w pętli, która zmienia wartość w komórce StartDay (Range("StartDay")=r). Ponieważ wartość ta jest wykorzystywana przez dwie serie danych, wartość początkowa wykresu jest nieustannie aktualizowana. Szybkość przewijania wykresu jest kontrolowana przez wartość komórki Increment.

Przykład Animacja_Hipocykloida.xlsm - do samodzielnego wykonania.

Modyfikacja danych wykresu na podstawie aktywnej komórki

Na rysunku 3 pokazano wykres utworzony na podstawie danych z wiersza aktywnej komórki. Kiedy użytkownik przesunie wskaznik komórki, wykres zostanie automatycznie uaktualniony.

0x01 graphic

Rysunek 3. Ten wykres zawsze wyświetla dane na podstawie wiersza odpowiadającego aktywnej komórce

W przykładzie użyto procedury obsługi zdarzenia dla obiektu Sheetl. Kiedy użytkownik zmienia zaznaczenie, przenosząc wskaźnik komórki, zachodzi zdarzenie SelectionChange. Procedura obsługi tego zdarzenia (umieszczona w module kodu obiektu Arkuszl) jest następująca:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Call UpdateChart

End Sub

Za każdym razem, kiedy użytkownik przemieści wskaźnik do innej komórki, wykony­wana jest procedura Worksheet_SelectionChange. Procedura obsługi zdarzenia wywołuje procedurę UpdateChart, której kod został przedstawiony poniżej:

Sub UpdateChart()

Dim ChtObj As ChartObject

Dim UserRow As Long

Set ChtObj = ActiveSheet.ChartObjects(1)

UserRow = ActiveCell.Row

If UserRow < 4 Or IsEmpty(Cells(UserRow, 1)) Then

ChtObj.Visible = False

Else

ChtObj.Chart.SeriesCollection(1).Values = _

Range(Cells(UserRow, 2), Cells(UserRow, 6))

ChtObj.Chart.ChartTitle.Text=Cells(UserRow, 1).Text

ChtObj.Visible = True

End If

End Sub

Zmienna UserRow zawiera numer wiersza aktywnej komórki. Instrukcja If sprawdza, czy aktywna komórka znajduje się w wierszu z danymi (dane rozpoczynają się od wiersza numer 4). Jeżeli wskaźnik aktywnej komórki znajduje się w wierszu, który nie zawiera danych, obiekt ChartObject zostaje ukryty, a zamiast niego wyświetlany jest komunikat Nie mogę wyświetlić wykresu. Jeżeli w wierszu znajdują się dane do wyświetlenia, pro­cedura ustawia właściwość Values obiektu Serie na zakres kolumn 2-6 aktywnego wier­sza oraz nadaje obiektowi ChartTille wartość reprezentującą tekst w kolumnie A.

Skoroszyt z tym przykładem - Wykres aktywnej komórki.xlsm.

Formuła SERIE

Dane wykorzystane w każdej serii wykresu określa formuła SERIE, która pojawia się na pasku formuły po zaznaczeniu serii danych na wykresie. Nie jest to formuła w pełnym tego słowa znaczeniu; mówiąc inaczej, nie można użyć jej w komórce i odwrotnie, w formule SERIE nie można wykorzystać funkcji arkuszowych. Można jednak modyfikować jej argumenty.

0x01 graphic

Rysunek 4. Formuła SERIE pojawia się na pasku formuły po zaznaczeniu serii danych na wykresie

Formuła SERIE ma następującą składnię:

=SERIE(nazwa_serii, etykiety_kategorii, wartości, kolejność, rozmiary)

Argumenty formuły SERIE opisano poniżej:

• nazwa_serii (opcjonalny) - odwołanie do komórki zawierającej nazwę serii do wykorzystania w legendzie. Jeżeli wykres składa się tylko z jednej serii danych, argument ten jest wykorzystywany jako tytuł. Można go także podać jako tekst ujęty w cudzysłów. Jeżeli argument zostanie pominięty, Excel utworzy domyślną nazwę serii (np. Seria 1).

• etykiety_kategorii (opcjonalny) - odwołanie do zakresu zawierającego etykiety dla osi kategori. Jeżeli argument zostanie pominięty, Excel zastosuje kolejne liczby całkowii począwszy od 1. Dla wykresów XY ten argument definiuje etykiety dla osi X. Poprawne jest także odwołanie do nieciągłego zakresu. W takim przypadku adresy zakresów powinny być oddzielone przecinkami i ujęte w nawiasy. Argument można także zdefiniować w postaci tablicy wartości oddzielonych przecinkami (lub tekstów w cudzysłowach) ujętych w nawiasy klamrowe.

• wartości (wymagany) - odwołanie do zakresu zawierającego wartości dla serii Dla wykresów XY ten argument definiuje wartości dla osi Y. Poprawne jest także odwołanie do nieciąpłeso zakresu. W takim przypadku adresy zakresów powinny być oddzielone przecinkami i ujęte w nawiasy. Argument można także zdefiniować w postaci tablicy wartości oddzielonych przecinkami, ujętych w nawiasy klamrowe.

• kolejność (wymagany) - liczba całkowita określająca kolejność wykreślania serii. Ten argument ma znaczenie tylko wtedy, gdy wykres składa się z więcej niż jednej serii. Zastosowanie odwołania do komórki nie jest dozwolone.

• rozmiary (tylko dla wykresów bąbelkowych) - odwołanie do zakresu zawierającego wartości rozmiarów bąbelków w wykresach bąbelkowych. Poprawne jest także odwołanie do nieciągłego zakresu. W takim przypadku adresy zakresów powinny być oddzielone przecinkami i ujęte w nawiasy. Argument można także zdefiniować w postaci tablicy wartości ujętych w nawiasy klamrowe.

Odwołania do zakresów w formule SERIE zawsze są bezwzględne i zawsze zawierają nazwę arkusza. Oto przykład:

=SERIE(Arkuszl!$B$1,,Arkuszl!$B$2:$B$7,l)

Odwołanie do zakresu może składać się z obszaru nieciągłego. W takim przypadku poszczególne zakresy składowe należy oddzielić średnikami i ująć argument w nawiasy. W poniższym przykładzie formuły SERIE wartości należą do zakresu B2:B3 oraz B5:B7:

=SERIE(,,(Arkuszl!$B$2:$B$3,Arkuszl!$B$5:$B$7),l)

Odwołania do zakresów można zastąpić nazwami zakresów. Jeżeli wybierzesz takie rozwiązanie (ą nazwy zostały zdefiniowane na poziomie skoroszytu), Excel zmodyfikuje odwołania, wprowadzająć w formule SERIE nazwę skoroszytu. Oto przykład:

=SERIE(Arkuszl!$B$1,,budżet.xlsx!MojeDane,1)

Zastosowanie języka VBA do identyfikacji zakresu danych prezentowanych na wykresie

W tym podrozdziale omó­wiono zastosowanie makr VBA do identyfikacji zakresów serii danych prezentowanych na wykresie, kiedy na przykład trzeba zwiększyć serię danych poprzez dodanie do zakresu nowej komórki.

Poniżej zamieszczono opis trzech właściwości, które będą potrzebne do wykonania tego zadania.

• Właściwość Formuła - zwraca lub ustawia formułę SERIE dla serii danych. Po zaznaczeniu serii danych na wykresie w pasku formuły wyświetla się formuła SERIE. Właściwość Formuła zwraca tę formułę jako łańcuch znaków.

0x01 graphic

Rysunek 5. Właściwość Formuła zwraca formułę jako łańcuch znaków (?ActiveChart.SeriesCollection(1).Formula)

• Właściwość Values - zwraca lub ustawia kolekcję wszystkich wartości w serii. Można ją podać jako zakres danych w arkuszu lub tablicę stałych, ale nie można użyć kombinacji obu tych sposobów.

• Właściwość XValues - zwraca lub ustawia tablicy wartości osi X dla serii danych wykresu. Właściwość XValues można podać jako zakres danych w arkuszu lub tablicy stałych, ale nie mozna użyć kombinacji obu tych sposobów. Właściwość XValues może także być pusta.

Kiedy ustawiasz właściwość Values obiektu Series możesz określić obiekt Range lub tablice. Jednak odczytywanie tej właściwości zawsze zwraca tablicy. Niestety model obiektowy wykresu nie pozwala na odczytanie obiektu Range wykorzystywanego przez obiekt Series.

Jednym ze s|iosobów rozwiązania tego problemu jest napisanie kodu, który analizuje formułę SlRIE i wydobywa z niej adresy zakcesów. Brzmi to dosyć prosto, ale w rzeczywistości jest to trudne zadanie - ze względu na zlozoność formuły SlRIE. Poniżej podano kilka przykładów poprawnych formuł SlRIE:

=SERIE(Arkuszl!$B$1, Arkuszl!$A$2:$A$4, Arkuszl!$B$2:$B$4, 1)

=SERIE(,,Arkuszl!$B$2:$B$4,1)

=SERIE(, Arkuszl! $A$2: $A$4, Arkuszl! $B$2:$B$4, l)

=SERIE("Podsumowanie sprzedaży", , Arkuszl!$B$2:$B$4, l)

=SERIE( , {"Sty","Lut","Mar"}, Arkuszl!$B$2:$B$4, 1)

=SERIE( , (Arkuszl!$A$2.Arkuszl!$A$4), (Arkuszl!$B$2.Arkuszl!$B$4), l)

=SERIE (Arkuszl!$B$1, Arkuszl!$A$2:$A$4, Arkuszl!$B$2:$B$4, l, Arkuszl!$C$2:$C$4)

Jak widać, formuła SERIE nie zawsze musi posiadać wszystkie argumenty, może używać tablic, a nawet adresów nieciągłych zakresów komórek. Aby było jeszcze trudniej, dla wykresów bąbelkowych istnieje dodatkowy argument. Próba przeanalizowania składni argumentów z pewnością nie jest try­wialnym zadaniem nawet dla doświadczonego programisty.



Wyszukiwarka

Podobne podstrony:
6135
6135
6135
6135
6135, konspekty z w-f
6135
06 Kancelarie odszkodowawczeid 6135 pptx

więcej podobnych podstron