Microsoft Excel

Herbers Excel/VBA-Archiv

Format Fill: Patterned+Color tut nicht

Betrifft: Format Fill: Patterned+Color tut nicht von: laura_v
Geschrieben am: 13.08.2020 10:53:22

Hallo zusammen,
ich bin mit meinem VBA-Latein am Ende und das ist für gewöhnlich ganz gut. Wenn ich nicht weiter weiß, google ich viel, lande meistens hier oder werfe den Makro-Rekorder an.

So auch hier. Im gesamten Skript möchte ich automatisiert ein Diagramm aus vielen (>100) Datenpunkten erstellen, so dass jeder Datenpunkt eine eigene Datenreihe ist und man ihn gezielt wegfiltern kann. Bestimmten Datenreihen (= Datenpunkten) möchte ich spez. Formatierungen geben, alle gemustert (patterned) mit Vordergrunds- und Hintergrundsfarbe.

Ich habe ein sehr abgespecktes Excel-File mit 5 Datenpunkten beigefügt (https://www.herber.de/bbs/user/139603.xlsm). Ich muss dazu sagen, ich bin nicht die effizienteste Programmiererin ;) Im Reiter "Plot" muss man auf den Button klicken. Die ersten 3 Punkte sollen rot gepunktet formatiert werden, die letzten beiden grün mit Konfettimuster.

Folgenden Code Schnippsel habe ich mit Hilfe des Makro-Rekorders zusammengestellt.

While l <= lmax
        ActiveChart.FullSeriesCollection(l).Select
        Selection.MarkerSize = 8
        Selection.MarkerStyle = xlMarkerStyleCircle
        
        If l <= 9 Then

            With Selection.Format.Fill
                .Visible = msoTrue
                .ForeColor.RGB = RGB(255, 0, 0)
                .BackColor.RGB = RGB(255, 255, 255)
                .Patterned msoPattern70Percent
            End With

            With Selection.Format.Line
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 0, 0)
                .Visible = msoTrue
                .Weight = 0.75
            End With
            
        ElseIf l > 2 And m <= lmax Then
        
            With Selection.Format.Fill
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 255, 0)
                .BackColor.RGB = RGB(255, 255, 255)
                .Patterned msoPatternLargeConfetti
            End With
                
            With Selection.Format.Line
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 0, 0)
                .Visible = msoTrue
                .Weight = 0.75
            End With
            
        End If
        
       l = l + 1
    Wend
Wie man im Excel schön sieht, sieht man weder das rote noch das grüne Muster. Ein schritt-für-schritt Debugging ergab, dass die Farbe korrekt umgesetzt wird als voll ausgefülltes Symbol und sobald der "Patterned" Befehl kommt, wird die Farbe nicht mehr berücksichtigt. Eine andere Reihenfolge bringt auch nichts, erst "Patterned", dann "ForeColor", weil dann gar kein Muster mehr erscheint. Ziemlich blöd, dass die Mustervordergrundsfarbe "ForeColor" heißt, aber auch die Farbe für die komplette Farbfüllung.

Ich weiß nicht mehr weiter und finde dazu auch nichts. Warum schlägt der Rekorder etwas vor, wenn es nicht funktioniert? >_< Oder habe ich etwas vergessen? Hatte jemand schon dasselbe Problem und hat einen Workaround für mich?

Für jede Hilfe wäre ich dankbar. Hoffe, das Beispiel ist nachvollziehbar.

Dankeschön und viele Grüße
Laura

Betrifft: AW: zu komplex
von: Fennek
Geschrieben am: 13.08.2020 11:28:31

Hallo Laura,

m.M.n. kann man auch in EINER Datenreihe jeden Punkt einzeln einfärben.

mfg

Betrifft: AW: komplex viell., aber Formatierung tut ja nicht
von: laura_v
Geschrieben am: 13.08.2020 11:37:58

Hallo Fennek,

korrekt, aber man kann dann keine einzelnen Datenpunkte in der Datenreihe wegfiltern. Und das ist für meine Anwendung zwingend erforderlich. Daher ist jeder Datenpunkt = eine Datenreihe. Und grundsätzlich zielt meine Frage darauf ab, warum die Formatierung nicht so tut, wie sie (laut Rekorder) tun sollte - unabhängig davon, ob es sich um eine Datenreihe mit einem oder mehreren Punkten handelt. Daran kann es doch nicht liegen, oder?

Viele Grüße
Laura

Betrifft: AW: komplex viell., aber Formatierung tut ja nicht
von: peterk
Geschrieben am: 13.08.2020 12:51:09

Hallo Laura

Wenn Du auf "Patterned" verzichten kannst dann so:

        If l <= 9 Then

            With Selection.Points(1).Format.Fill
                .Visible = msoTrue
                .ForeColor.RGB = RGB(255, 0, 0)
                .BackColor.RGB = RGB(255, 255, 255)
            End With

            With Selection.Format.Line
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 0, 0)
                .Visible = msoTrue
                .Weight = 0.75
            End With
            
        ElseIf l > 2 And n <= lmax Then  
            
            With Selection.Points(1).Format.Fill
                
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 255, 0)
                .BackColor.RGB = RGB(255, 255, 255)

            End With
                     
            With Selection.Format.Line
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 0, 0)
                .Weight = 0.75
            End With
            
        End If

Mit "Patterned" hab ich es nicht hinbekommen. Achtung: In Deinem Code steht

 ElseIf l > 2 And m <= lmax Then  


aber die Variable "m" ist nicht definiert/zugeordnet. Um solche Fehler zu vermeiden solltest Du "Option Explicit" verwenden damit schreibfehler sofort ersichtlich werden. Und zum Schluss: Deinen Button kannst Du auch ohne "Select" erzeugen.

    With ActiveSheet.Buttons.Add(1212, 29.25, 146.625, 49.5)
        .OnAction = "updateDiagramm"
        .Characters.Text = "Diagramm updaten"
        With .Characters(Start:=1, Length:=47).Font
            .Name = "Calibri"
            .FontStyle = "Standard"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = 1
        End With
    End With

Peter

Betrifft: AW: komplex viell., aber Formatierung tut ja nicht
von: laura_v
Geschrieben am: 13.08.2020 13:07:42

Hallo Peter,

danke für die nützlichen Infos zum Aufräumen :)

Ja, auf eins der beiden (Pattern oder Farbe) müsste ich verzichten. Ich habe im originalen Sheet aber so viele Punkte, dass Farben allein nicht ausreichen würden zur Unterscheidung :( ich finde es auch einfach nicht nutzerfreundlich, wenn der Makro-Rekorder sagt es geht und dann geht es nicht. Vielleicht findet sich doch was, der Verzicht wäre ein absoluter Notnagel.

Viele Grüße
Laura

Betrifft: AW: komplex viell., aber Formatierung tut ja nicht
von: peterk
Geschrieben am: 13.08.2020 16:15:28

Hallo Laura

Dein Problem war wirklich eine harte Nuss ;-)

    l = n
    While l <= lmax
        ActiveChart.SeriesCollection(l).Select
        Selection.MarkerSize = 8
        Selection.MarkerStyle = xlMarkerStyleCircle
      
        If l <= 9 Then
            
            With Selection.Points(1)
                With .Format.Fill
                    .Visible = msoTrue
                    .Patterned 33
                    .BackColor.RGB = RGB(255, 0, 0)     'red
                End With
                .MarkerBackgroundColor = RGB(0, 0, 255) ' blue
            End With

            With Selection.Format.Line
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 0, 0)
                .Weight = 0.75
            End With
            
        ElseIf l > 2 And n <= lmax Then
            
            With Selection.Points(1)
                With .Format.Fill
                    .Visible = msoTrue
                    .Patterned 31
                    .BackColor.RGB = RGB(0, 255, 0)     'green
                End With
                .MarkerBackgroundColor = RGB(255, 0, 0) ' red
            End With
            
            With Selection.Format.Line
                .Visible = msoTrue
                .ForeColor.RGB = RGB(0, 0, 0)
                .Weight = 0.75
            End With
            
        End If
        
        l = l + 1
    Wend
    




Betrifft: AW: komplex viell., aber Formatierung tut ja nicht
von: laura_v
Geschrieben am: 13.08.2020 17:21:06

Hallo Peter,

ich bin begeistert, Hammer! Da wäre ich in 10 kalten Wintern nicht draufgekommen.
Vielen vielen Dank, tut alles bestens! :)

Viele Grüße
Laura

Betrifft: AW: komplex viell., aber Formatierung tut ja nicht
von: peterk
Geschrieben am: 13.08.2020 19:43:57

Hallo

Danke für die Rückmeldung und viel Spass beim Programmieren :-)

Peter