Benutzer mit den meisten Antworten
farbe eines einzelnen Chartbalken aus VB ändern

Frage
-
Servus Experten
ich erstelle aus der folgenden Tabelle :
Soll-Wert 100 Ist-Wert 85,71428571 85,71428571 Deckungslücke 14,28571429
das folgende Chart
Das mit folgendem Code:
Dim xlApp As excel.Application Dim xlWorkBook As excel.Workbook Dim xlWorkSheet As excel.Worksheet Dim misValue As Object = System.Reflection.Missing.Value Dim xMychart As excel.Chart xlApp = New excel.Application xlWorkBook = xlApp.Workbooks.Add(misValue) xlWorkSheet = xlWorkBook.Sheets(1) Dim IstWert As Decimal = 120 Dim SollWert As Decimal = 140 Dim Deckung As Decimal = Math.Abs(IstWert - SollWert) 'add data xlWorkSheet.Cells(1, 1) = "" xlWorkSheet.Cells(2, 1) = "Soll-Wert" xlWorkSheet.Cells(3, 1) = "Ist-Wert" xlWorkSheet.Cells(4, 1) = IIf(IstWert < SollWert, "Deckungslücke", "Überdeckung") xlWorkSheet.Cells(2, 2) = 100 xlWorkSheet.Cells(3, 3) = IstWert / SollWert * 100 xlWorkSheet.Cells(3, 4) = IIf(IstWert > SollWert, 100, IstWert / SollWert * 100) xlWorkSheet.Cells(4, 4) = Deckung / SollWert * 100 'create chart Dim chartPage As excel.Chart Dim xlCharts As excel.ChartObjects Dim myChart As excel.ChartObject Dim chartRange As excel.Range xlCharts = xlWorkSheet.ChartObjects myChart = xlCharts.Add(10, 80, 300, 250) chartPage = myChart.Chart chartRange = xlWorkSheet.Range("A1", "D4") chartPage.SetSourceData(Source:=chartRange) chartPage.ChartType = excel.XlChartType.xlColumnClustered Dim myAxis As excel.Axis = CType(chartPage.Axes(excel.XlAxisType.xlValue, excel.XlAxisGroup.xlPrimary), excel.Axis) Dim Myseries As excel.Series = CType(chartPage.SeriesCollection(2), excel.Series) Debug.Print(Myseries.Points.count) With chartPage .ChartType = 52 .PlotArea.Interior.ColorIndex = 2 .ChartArea.Font.Size = 8 .HasLegend = False .ApplyDataLabels() .HasTitle = False .HasLegend = True .SeriesCollection(1).interior.color = Color.Red .SeriesCollection(2).interior.color = Color.Brown .SeriesCollection(3).interior.color = Color.Blue End With 'myAxis. With myAxis .HasTitle = False '.AxisTitle.Text = "Sales Figures" .MaximumScaleIsAuto = False .MinimumScaleIsAuto = False .MinimumScale = 0 .MajorUnit = 100 End With 'exporting chart as picture file xMychart = CType(chartPage, excel.Chart) chartPage.Export("C:\test.jpg", "JPG") 'xMychart.Export("C:\xy.jpg", "JPG") 'myChart.Chart.Export("C:\excel_chart_export.bmp") 'chartPage.ChartType.eSaveAs("C:\excel_chart_export.bmp", "BMP") 'xlWorkSheet.ChartObjects(1).chart.Export("C:\excel_chart_export.bmp", "BMP") xlWorkSheet.SaveAs("C:\vbexcel.xls") xlWorkBook.Close() xlApp.Quit() releaseObject(xlApp) releaseObject(xlWorkBook) releaseObject(xlWorkSheet) MsgBox("Chart File Exported !")
Mit der Codezeile [.SeriesCollection(2).interior.color = Color.Brown] ändere ich die Farbe (siehe braune Balken im Bild) und zwar von beiden Balken auf einmal. Ich möchte aber von jedem Balken einzeln die Farbe ändern?!
Idee ??? mfg eem monarch
Antworten
-
Hallo Monarch,
zusätzlich zu Dimitars Antwort klebe ich Dir mal ein Beispiel an, das ich seinerzeit zum Flackern in einer PowerpointPräsentation machen sollte. Darin kannst Du m.E.n fast alles erkennen.
Sub BlinkendeCharts() Dim i As Integer Dim n As Integer Dim Chart As Excel.Chart Set Chart = ActiveChart For n = 1 To Chart.SeriesCollection.Count For i = 1 To Chart.SeriesCollection(n).Points.Count Chart.SeriesCollection(n).Points(n).Format.Fill.ForeColor.RGB = RGB(getRand, getRand, getRand) Next i Next n End Sub Function getRand() As Integer Randomize getRand = Rnd * 255 End Function
das ist jetzt natürlich direkt VBA.
Du müsstest das halt auf die Fremdanwendung rüberziehen.
Gruß bei noch 32°C aus Hannover
Raimo
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 7. Juli 2015 06:45
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 17. Juli 2015 09:01
Alle Antworten
-
Hallo Monarch-Falter,
Hoffentlich hilft Dir die Lösung aus dieser Diskussion, bei der alle Punkte in der gewünschten Reihe gefärbt werden:
Changing Bar colors using VBA based on category labelGruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo Monarch,
zusätzlich zu Dimitars Antwort klebe ich Dir mal ein Beispiel an, das ich seinerzeit zum Flackern in einer PowerpointPräsentation machen sollte. Darin kannst Du m.E.n fast alles erkennen.
Sub BlinkendeCharts() Dim i As Integer Dim n As Integer Dim Chart As Excel.Chart Set Chart = ActiveChart For n = 1 To Chart.SeriesCollection.Count For i = 1 To Chart.SeriesCollection(n).Points.Count Chart.SeriesCollection(n).Points(n).Format.Fill.ForeColor.RGB = RGB(getRand, getRand, getRand) Next i Next n End Sub Function getRand() As Integer Randomize getRand = Rnd * 255 End Function
das ist jetzt natürlich direkt VBA.
Du müsstest das halt auf die Fremdanwendung rüberziehen.
Gruß bei noch 32°C aus Hannover
Raimo
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 7. Juli 2015 06:45
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 17. Juli 2015 09:01