Utworzenie wykresu z wykorzystaniem kodu VBA jest relatywnie łatwe, zawsze można wspomóc się rejestratorem makr co szczególnie dotyczy początkujących adeptów programowania. W jaki sposób odnaleźć źródło danych dla wskazanego wykresu, a więc zakres komórek, na bazie których nasz wykres rysuje linie czy kolumny? W tym zadaniu nie pomoże rejestrator makr, całą koncepcję musimy oprzeć na obiektach powiązanych z wykresem wykorzystując precyzyjnie hierarchię tych obiektów i odpowiednie właściwości.
Jako punkt odniesienia przyjmijmy następujący wykres liniowy posiadający jedną serię danych.
W rozwiązaniu, które poniżej musimy wykorzystać następujące obiekty i ich właściwości:
1. Obiekt Chart, czyli wykres, i jego właściwość:
2. Series, czyli serię danych wykresu, oraz jej właściwość
3. Formula, zwracającą formułę tworzącą referencję do zakresu danych.
Właściwy kod niezbędny do odnalezienia poszukiwanego zakresu wraz z dodatkowymi komentarzami znajduje się poniżej.
01 | Sub GetSourceCellsAddress() |
06 | Set CH = ActiveSheet.ChartObjects(1).Chart |
11 | Set SC = CH.SeriesCollection(1) |
15 | Dim strFormula As String |
16 | strFormula = SC.Formula |
18 | Debug.Print strFormula |
25 | Dim strRangeFromFormula As String |
26 | strRangeFromFormula = Mid(strFormula, _ |
27 | InStrRev(strFormula, "!" ) + 1, _ |
28 | InStrRev(strFormula, "," ) - InStrRev(strFormula, "!" ) - 1) |
30 | Debug.Print strRangeFromFormula |
34 | Range(strRangeFromFormula). Select |
A co jeżeli chcielibyśmy odnaleźć kolejne elementy, punkty naszego wykresu i referencję do zakresu dla każdego z nich? W tym celu w miejscu oznaczonym gwiazdką w powyższym przykładzie musimy wstawić poniższy kod.
4 | For Each rngPT In Range(strRangeFromFormula) |
5 | Debug.Print rngPT.Address |