2012-12-12 20 views
5

Mam kilka wykresów, w których wartości X to tekst, a wartości Y to wartości liczbowe. Chcę kolorować każdy pasek Czerwony, jeśli wartość Y dla słupka jest mniejsza niż zero, Zielona, ​​jeśli jest większa lub równa zero. Ponadto, jeśli wartość X paska to "NET CHANGE", potrzebuję, aby pasek był żółty. Postępowałem zgodnie ze wskazówkami w poprzednim wątku StackOverflow tutaj: Changing Bar colors using VBA based on category label.excel vba zmiana koloru paska wykresu dla punktu danych na podstawie wartości punktu

Otrzymuję błąd czasu wykonania 451 Procedura nie została zdefiniowana i procedura odzyskiwania właściwości nie zwróciła obiektu.

Moje kodu jest poniżej:

For chartIterator = 1 To ActiveSheet.ChartObjects.count 

    For pointIterator = 1 To ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points.count 
     If ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Values(pointIterator) >= 0 Then 
      ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(146, 208, 80) 
     Else 
      ActiveWorkbook.Sheets("Due To Chart").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(255, 0, 0) 
     End If 
    Next pointIterator 

Next chartIterator 

Błąd pojawia się w instrukcji IF. Próbowałem również .Points (pointIterator) .Value, który dostarczył mi błąd "właściwość lub metoda nie zdefiniowana dla tego obiektu".

Jakieś myśli o tym, co robię źle?

Z góry dziękuję za pomoc.

Odpowiedz

6

Występują problemy z używaniem SeriesCollection (1). Wartości, które traktujesz jako tablicę, którą możesz przerobić. Zamiast tego jest to funkcja zwracająca wartości punktów w SeriesCollection.

Potrzebne jest przypisanie wyników funkcji do zmiennej tablicowej, a następnie iteracja po tablicy w celu sprawdzenia, czy wartości w tablicy są większe niż lub mniejsze od zera. Następnie możesz przypisać kolory do punktów wykresu.

Ten kod powinien załatwić sprawę:

Sub color_chart() 

    Dim chartIterator As Integer, pointIterator As Integer, _ 
     seriesArray() As Variant 

    For chartIterator = 1 To ActiveSheet.ChartObjects.Count 
     seriesArray = ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
         chart.SeriesCollection(1).Values 

     For pointIterator = 1 To UBound(seriesArray)    

      If seriesArray(pointIterator) >= 0 Then 
       ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
       chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(146, 208, 80) 
      Else 
       ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
       chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(255, 0, 0) 
      End If 

     Next pointIterator 

    Next chartIterator 

    End Sub 
+0

To działało idealnie dzięki! – user1899231

1

Oto alternatywa, która nie wymaga VBA i działa dynamicznie wzorach aktualizacji. Sprawdź „Chart Warunkowe sformatowany Bar” przykład w tym tutorialu:

Conditional Formatting in Excel Charts

+0

Nie sprawdzałem tego pierwotnie, ale jest to bardzo fajne. Dzięki! – user1899231