Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

VBA Diagramm

Betrifft: VBA Diagramm von: Charly CNX
Geschrieben am: 04.09.2020 04:35:41

Hallo Community
Ich probiere gerade ein wenig mit Diagrammen.
Bitte nicht lachen wenn ihr den Code seht.
Warscheinlich macht man das alles ganz anders.
Es funktioniert alles wie es soll, bis auf eine Kleinigkeit.
Das Liniendiagramm funktioniert wie gewünscht.
Das Problem ist das Säulendiagramm.
Wenn man nach dem öffnen der Datei in C7 (Values) von Cases auf Deaths (oder umgekehrt) wechselt, sind die Säulen fast weiß.
Nach nochmaligen wechseln oder Änderungen in C3-C5-C6 werden die richtig gefärbt.
Leider kann ich mit meinen bescheidenen VBA (Kenntnissen?) den Grund dafür nicht erkennen.
Also kann ichs auch nicht abstellen und das nervt mich.
Ich hoffe ihr könnt mir helfen.
Vielen Dank vorab.

Gruss Charly
https://www.herber.de/bbs/user/140034.xlsb

Betrifft: AW: VBA Diagramm
von: Beverly
Geschrieben am: 04.09.2020 12:18:41

Hi Charly,

kann ich nicht nachvollziehen.

Deinen Code kann man aber wesentlich unkomplizierter schreiben - vielleicht hilft das ja bei dir.
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Ch_1 As Chart: Set Ch_1 = Tab1.ChartObjects("Crt_1").Chart
    Dim Ch_2 As Chart: Set Ch_2 = Tab1.ChartObjects("Crt_2").Chart
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range("C3,C5:C7")) Is Nothing Then
        With Tab1.ListObjects("Data")
            .Range.AutoFilter Field:=1, Criteria1:=">=" & CLng(Range("C5")), Operator:=xlAnd
            .Range.AutoFilter Field:=2, Criteria1:=Range("C3")
        End With
        With Ch_1
            .Axes(xlCategory).MajorUnit = Range("C6")
            .ChartTitle.Text = "SARS-CoV-2 (COVID-19)  -  " & Range("c3") & "  -   " & _
                Range("c7") & "/Day"
            With .SeriesCollection(1)
               If Range("C7") = "Cases" Then
                   .Values = Range("Data[Cases]")      '<== nur Y-Werte
                   .Format.Line.ForeColor.RGB = RGB(80, 150, 210)
                Else
                   .Values = Range("Data[Deaths]")     '<== nur Y-Werte
                   .Format.Line.ForeColor.RGB = RGB(150, 150, 150)
                End If
            End With
        End With
'---------------------------------------------------------------------------------------
        With Ch_2
            .ChartTitle.Text = "SARS-CoV-2 (COVID-19)  -  " & Range("c3") & "  -   " & _
                Range("c7") & "/Month"
            With .FullSeriesCollection(1)
                .ApplyDataLabels
                .DataLabels.Format.TextFrame2.TextRange.Font.Size = 9
                .DataLabels.Format.TextFrame2.TextRange.Font.Name = "Calibri Light"
                If Range("C7") = "Cases" Then
                    .Values = Tab1.Range("F3:F14")      '<== nur Y-Werte
                    With .Format.Fill
                        .ForeColor.RGB = RGB(230, 230, 240)
                        .BackColor.RGB = RGB(70, 115, 195)
                    End With
                Else
                    .Values = Tab1.Range("G3:G14")      '<== nur Y-Werte
                    With .Format.Fill
                        .ForeColor.RGB = RGB(230, 230, 230)
                        .BackColor.RGB = RGB(150, 150, 150)
                    End With
                End If
            End With
        End With
'----------------------------------------------------------------------------------------------- _

        ActiveWindow.ScrollRow = Range("i:i").Find("*", , , , , xlPrevious).Row - 2
    End If
    Set Ch_1 = Nothing
    Set Ch_2 = Nothing
End Sub

Den X-Wertebereich für beide Diagramme musst du nicht jedesmal neu zuweisen - der bleibt doch gleich, es müssen nur die Bereiche für die Y-Werte neu zgewiesen werden. Dasselbe trifft für den Gradienten der Füllung beim Säulendiagramm und die Strichstärke beim Liniendiagramm zu - die ändern sich auch nicht.


GrußformelBeverly's Excel - Inn

Betrifft: Vielen Dank Karin
von: Charly CNX
Geschrieben am: 05.09.2020 07:51:57



Beiträge aus dem Excel-Forum zum Thema "VBA Diagramm"