2015-04-16 14 views
5

Piszę kod VBA do modyfikowania wykresów Excel. W przypadku wykresu rozrzutu muszę zmodyfikować kolor linii znacznika, a czasami kolor linii łączących. Mogę robić oba ręcznie, ale kiedy nagrywam makro, obie akcje skutkują tym samym kodem, mimo że wyniki są bardzo różne.Excel VBA Kolor linii/linii znaczników Kolor

Każdy pomysł, jak odróżnić kolor linii i kolor linii znacznika w kodzie?

Kod ten został stworzony kiedy nagrałem sam zmienia kolor linii obrysowych

Sub Macro3() 
' 

    ' Macro3 Macro 
    ' 
    ' 
     ActiveChart.SeriesCollection(2).Select 
     With Selection.Format.Line 
      .Visible = msoTrue 
      .ForeColor.ObjectThemeColor = msoThemeColorAccent1 
      .ForeColor.TintAndShade = 0 
      .ForeColor.Brightness = 0 
     End With 
    End Sub 

Kod ten został stworzony kiedy nagrałem sobie zmianę koloru linii łączącej markerów

Sub Macro4() 
' 
' Macro4 Macro 
' 
' 
'Change the Line Color 
    ActiveChart.SeriesCollection(2).Select 
    With Selection.Format.Line 
     .Visible = msoTrue 
     .ForeColor.ObjectThemeColor = msoThemeColorAccent1 
     .ForeColor.TintAndShade = 0 
     .ForeColor.Brightness = 0 
    End With 
End Sub 
+0

Może być zależny od wersji, ale prawdopodobnie odpowiedź brzmi: "nie możesz". Jednak http://peltiertech.com/conditional-formatting-of-lines-in-an-excel-line-chart-using-vba/ może pomóc. – pnuts

+1

To jest niedociągnięcie w modelu obiektowym dla wykresów. Użycie składni .Format.Line powoduje zastosowanie tego samego formatowania do linii znaczników i linii łączącej. Użycie opcji .Border powoduje zastosowanie koloru do linii łączącej i .MarkerForegroundColor do linii znacznika. –

Odpowiedz

11

kolor linii łączących to Series.Format.Line.ForeColor. Kolor linii znacznika to Series.MarkerForegroundColor. Ale przynajmniej z programem Excel 2007 pojawia się problem z ustawieniem Series.Format.Line.ForeColor. Zobacz przykład:

Sub Macro3() 
Dim oChart As Chart 
Dim oSeries As Series 

Set oChart = ActiveChart 
Set oSeries = oChart.SeriesCollection(2) 

oSeries.Format.Line.Weight = 5 'Line.Weigth works ever 

oSeries.Format.Line.Visible = msoFalse 'for Line.ForeColor getting to work we have to cheat something 
oSeries.Format.Line.Visible = msoTrue 
oSeries.Format.Line.ForeColor.RGB = RGB(0, 255, 0) 'now it works 

oSeries.MarkerSize = 15 
oSeries.MarkerBackgroundColor = RGB(255, 0, 0) 'marker background 

oSeries.MarkerForegroundColor = RGB(0, 0, 255) 'marker foreground (lines around) 
End Sub 

ActiveChart to wykres punktowy. Jest to testowane w programie Excel 2007.

+0

Dzięki za odpowiedzi. @Axel, Twoja zasugerowana sztuczka zadziałała również dla mnie. Dzięki. –

+0

Dziękuję bardzo z całego serca za hackowanie .Line.Visible. Miałem pierwszą serię w kolekcji nie pokazano linii (w Excel 2010). Dodanie msoFalse przed msoTrue załatwiło sprawę! – zoagli

+0

W programie Excel 2013 linia między znacznikami jest najwyraźniej ustawiona za pomocą właściwości .Border. Zajęło mi godzinę próbowania twoich rad, zanim zdałem sobie sprawę, co się dzieje! –

2

Z programu Excel 2013 kolor linii i kolor linii znacznika można łatwo odróżnić, ponieważ kolor linii jest ustawiany za pomocą właściwości .Border, natomiast kolory znaczników są ustawiane za pomocą . MarkerBackgroundColor i . WłaściwościMarkerForegroundColor.

Więc dodaje daje białe znaczniki, z czerwonym obramowaniem i czarne linie łączące między nimi:

ActiveChart.SeriesCollection(1).Select 
With Selection 
    .Border.LineStyle = xlContinuous 
    .Border.Color = RGB(0,0,0) 
    .MarkerBackgroundColor = RGB(255, 255, 255) 
    .MarkerForegroundColor = RGB(255, 0, 0) 
End With 

NB: Jeśli skorzystać z Selection.Format.Line.Weight, Uwaga ta odnosi się zarówno do granic i linii łączącej grubości domyślnie

+0

'.Border',' .MarkerBackgroundColor' oraz '.MarkerForegroundColor' są starszymi bitami starego modelu obiektowego Excel 97-2003. Zostały one zastąpione przez 'LineFormat' i' FillFormat', ale nie zostały one w całości zaimplementowane w pakiecie Office 2007, a Office 2016 nie został jeszcze naprawiony. –

0

można użyć

ActiveChart.SeriesCollection (1) .MarkerForegroundColor = -2