2015-04-16 29 views
5

Sto scrivendo del codice VBA per modificare i grafici di Excel. Per un grafico a dispersione è necessario modificare il colore della linea di riferimento e talvolta il colore della linea delle linee di collegamento. Posso fare entrambe le cose manualmente ma quando registro una Macro, entrambe le azioni danno lo stesso codice nonostante i risultati siano molto diversi.Colore riga colore riga/indicatore VBA di Excel

Qualche idea su come distinguere tra un colore di linea e un colore di linea di riferimento nel codice?

Questo codice è stato creato quando ho registrato io stesso cambiando colore delle linee marcatore

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 

Questo codice è stato creato quando ho registrato io stesso cambiare il colore della linea che collega i marcatori

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

Può dipendere dalla versione, ma probabilmente la risposta è, approssimativamente, "non è possibile". Tuttavia http://peltiertech.com/conditional-formatting-of-lines-in-an-excel-line-chart-using-vba/ potrebbe aiutare. – pnuts

+1

Questa è una limitazione nel modello a oggetti per i grafici. L'uso della sintassi .Format.Line applica la stessa formattazione alla linea del marcatore e alla linea di collegamento. Usando .Border applica il colore alla linea di collegamento e .MarkerForegroundColor alla linea del marker. –

risposta

11

Il il colore della linea delle linee di connessione è Series.Format.Line.ForeColor. Il colore della linea dell'indicatore è Series.MarkerForegroundColor. Ma almeno con Excel 2007 c'è un problema con l'impostazione Series.Format.Line.ForeColor. Guarda l'esempio:

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 

L'ActiveChart è un grafico a dispersione. E questo è testato con Excel 2007.

+0

Grazie per le risposte. @ Axel, il tuo trucco suggerito ha funzionato anche per me. Grazie. –

+0

Grazie mille dal profondo del mio cuore per l'hack di .Line.Visible. Ho avuto la prima serie in una collezione che non mostrava la linea (in Excel 2010). Aggiungere msoFalse prima di msoTrue ha fatto il trucco! – zoagli

+0

Da Excel 2013 la linea tra i marcatori è apparentemente impostata utilizzando la proprietà .Border. Mi ci è voluta un'ora per provare i tuoi consigli prima che mi rendessi conto di cosa stava succedendo! –

2

da Excel 2013, il colore della linea e il colore della linea marcatore sono facili da distinguere, come il colore della linea viene impostato utilizzando la proprietà.Border, mentre i colori vengono impostati utilizzando marcatori .MarkerBackgroundColor e .MarkerForegroundColor proprietà.

Così il seguente vi darà indici bianchi, con un bordo rosso e linee di connessione nere tra loro:

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: Se si fanno uso di Selection.Format.Line.Weight, notare che questo vale per entrambi i confini e che collega lo spessore della linea di default

+0

'.Border',' .MarkerBackgroundColor' e '.MarkerForegroundColor' sono bit legacy del vecchio modello di oggetti Excel 97-2003. Dovevano essere sostituiti da 'LineFormat' e' FillFormat', ma questi erano implementati in modo incompleto in Office 2007 e in Office 2016 non sono ancora stati corretti. –

0

Si potrebbe utilizzare

ActiveChart.SeriesCollection (1) .MarkerForegroundColor = -2