2016-04-20 11 views
3

Das folgende Excel VBA-Modul wurde entwickelt, um die Farbe verschiedener Liniensegmente basierend auf einer Bedingung zu ändern. Es funktioniert gut, außer dass es nicht die einzelnen Linienmarker plotten wird. Das Problem ist anscheinend in den Zeilen xlMarkerStyleCircle, MarketSize, MarkerBackgroundColor und MarkerForegroundColor vorhanden. Ich bin mir nicht sicher, ob das Problem mit einer fehlerhaften Benennung von Objekten oder einer falschen Reihenfolge der Objektreferenzen zusammenhängt. Jede Hilfe oder Vorschläge wären sehr willkommen. Ebenso, wenn jemand eine effizientere Möglichkeit sieht, dasselbe Ziel zu kodieren, können Sie es gerne teilen.Excel VBA xlMarkerStyle nicht plotten

Dank freundlich ...

Cheers, John


Sub tropical_cyclone_track_format() 

    With ActiveSheet 
Set r = .Range("E24:E31") 
For i = 1 To .Shapes("CHART 3").Chart.SeriesCollection(1).Points.Count - 1 

    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerStyle = xlMarkerStyleCircle 
    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerSize = 2 
    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerBackgroundColor = RGB(0, 0, 0) 
    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerForegroundColor = RGB(0, 0, 0) 
    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.LineStyle = xlContinuous 
    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.Color = RGB(255, 255, 64) 
    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Transparency = 0 
    If r(i) = "1" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Weight = 1 

    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerStyle = xlMarkerStyleCircle 
    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerSize = 2 
    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerBackgroundColor = RGB(0, 0, 0) 
    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerForegroundColor = RGB(0, 0, 0) 
    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.LineStyle = xlContinuous 
    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.Color = RGB(255, 153, 16) 
    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Transparency = 0 
    If r(i) = "2" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Weight = 1 

    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerStyle = xlMarkerStyleCircle 
    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerSize = 2 
    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerBackgroundColor = RGB(0, 0, 0) 
    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerForegroundColor = RGB(0, 0, 0) 
    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.LineStyle = xlContinuous 
    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.Color = RGB(255, 3, 0) 
    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Transparency = 0 
    If r(i) = "3" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Weight = 1 

    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerStyle = xlMarkerStyleCircle 
    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerSize = 2 
    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerBackgroundColor = RGB(0, 0, 0) 
    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).MarkerForegroundColor = RGB(0, 0, 0) 
    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.LineStyle = xlContinuous 
    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border.Color = RGB(80, 0, 0) 
    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Transparency = 0 
    If r(i) = "4" Then .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Format.Line.Weight = 1 

    Next i 
    End With 

End Sub 

Antwort

0

das ist eine halbe Antwort, da sie eine Erklärung darüber, warum Ihr Code sieht nicht die einzelnen Linienmarkierungen zeichnen, aber versäumt, Ihnen den richtigen Weg zu geben, es zu tun. Wenn Sie Ihr Problem genauer untersuchen möchten, müssen Sie Ihr Arbeitsblatt angeben, damit ich die Details Ihres Diagramms auswerten kann.

Auf der anderen Seite ist Ihr Code ziemlich repetitiv und daher ineffizient.

Ich diskutiere jetzt diese 2 Probleme.

  1. Point Objekt hat keine Border Methode. Dies ist der Grund , warum Ihr Code nicht funktioniert. Dies bedeutet, dass Sie nicht Dinge wie Code schreiben:

    .Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1).Border

    Wenn Sie wissen möchten, welche Methoden tut Point Objekt hat, drücken Sie F2, während auf VBE. Wenn Sie mehr über Objekte und Methoden wissen möchten, können Sie versuchen analysistabs.com oder dummies.com und dann excel-spreadsheet.com. Auch hier kann ich Ihnen helfen, wenn Sie Ihr Arbeitsblatt teilen.

  2. Sie wiederholen 32 mal der Code

    .Shapes("CHART3").Chart.SeriesCollection(1).Points(i + 1)

    können Sie dies vermeiden, indem eine variable p vom Typ Point erklärt und seinen Wert direkt nach der for-Schleife zuweisen. Ich gebe dir eine Idee, wie du das erreichen kannst, aber damit es richtig funktioniert, solltest du dein Arbeitsblatt teilen.

    Sub tropical_cyclone_track_format() 
    
    Dim r As Range 
    Set r = ActiveSheet.Range("E24:E31") 
    
    Dim i As Integer 
    For i = 1 To ActiveSheet.Shapes("CHART 3").Chart.SeriesCollection(1).Points.Count - 1 
    
    Dim p As Point 
    Set p = ActiveSheet.Shapes("CHART 3").Chart.SeriesCollection(1).Points(i + 1) 
    
    If r(i) = "1" Then 
        With p 
    
         p.MarkerSize = xlMarkerStyleCircle 
         p.MarkerStyle = 2 
         p.MarkerBackgroundColor = RGB(0, 0, 0) 
         p.MarkerForegroundColor = RGB(0, 0, 0) 
         p.Format.Line.Transparency = 0 
         p.Format.Line.Weight = 1 
    
        End With 
    End If 
    
    If r(i) = "2" Then 
        With p 
    
         p.MarkerSize = xlMarkerStyleCircle 
         p.MarkerStyle = 2 
         p.MarkerBackgroundColor = RGB(0, 0, 0) 
         p.MarkerForegroundColor = RGB(0, 0, 0) 
         p.Format.Line.Transparency = 0 
         p.Format.Line.Weight = 1 
    
        End With 
    End If 
    
    If r(i) = "3" Then 
        With p 
    
         p.MarkerSize = xlMarkerStyleCircle 
         p.MarkerStyle = 2 
         p.MarkerBackgroundColor = RGB(0, 0, 0) 
         p.MarkerForegroundColor = RGB(0, 0, 0) 
         p.Format.Line.Transparency = 0 
         p.Format.Line.Weight = 1 
    
        End With 
    End If 
    
    If r(i) = "4" Then 
        With p 
    
         p.MarkerSize = xlMarkerStyleCircle 
         p.MarkerStyle = 2 
         p.MarkerBackgroundColor = RGB(0, 0, 0) 
         p.MarkerForegroundColor = RGB(0, 0, 0) 
         p.Format.Line.Transparency = 0 
         p.Format.Line.Weight = 1 
    
        End With 
    End If 
    Next i 
    
    End Sub