Kdysi jsem zkoušel napsat takový kód, ale bylo to pro Office XP.
Zase jsem narazil na nedodělaný kód, který by se mi hodil. První část funguje.
Vyberu graf a do sešitu "t" zkopíruji hodnoty, které později budu chtít nastavit na další grafy.
Předpoklad je že grafy mají stejný formát dat (počet řad sloupců).
Sub vyextrahuj_styly_grafu()
Dim it As ChartObject, j As Integer, i As Integer, R As Integer, wsT As Worksheet
Set wsT = Sheets("t")
If TypeName(Selection) <> "ChartArea" Then
MsgBox "Please select ChartArea, not" + TypeName(Selection)
Exit Sub
End If
For j = 1 To ActiveChart.SeriesCollection.Count
R = R + 1
With ActiveChart.SeriesCollection(j)
wsT.Cells(R, 1) = .Fill.ForeColor.RGB
wsT.Cells(R, 2) = .MarkerStyle
wsT.Cells(R, 3) = .MarkerSize
wsT.Cells(R, 4) = .MarkerForegroundColor
End With
Next
End Sub
Vygenerované data v sešitu t:
10077403 -4142 5 58
10077403 -4142 5 58
10077403 -4142 7 58
10077403 -4142 5 58
10077403 -4142 5 58
0 -4105 5 57
10077403 9 5 10
10077403 -4142 5 58
10077403 -4142 5 58
10077403 -4142 5 58
10077403 -4142 5 58
0 -4105 5 57
0 -4105 5 57
10077403 -4115 5 46
Následuje makro, které mělo podle této tabulky nastavit barvy a formátorvání čár vybraného grafu:
Sub nastav_styly_grafu_podle_tabulky()
'
' nastav_styly_grafu_podle_tabulky Makro
' zkratka ctrl+ě, (ctrl+plus e s hackem): přečti styly datových řad z tabulky a nastav je do vybraného grafu
'
' hotkey: Ctrl+ě
'
Dim wsS As Worksheet, it As ChartObject, table As Range, c As Integer, l As Integer, ChartSheetName As String
Dim R As Integer, G As Integer, B As Integer
ChartSheetName = ActiveSheet.Name
Set wsS = Sheets("t") ' Here is source table with Chart styles values
Sheets("t").Activate
Set table = wsS.Range("A1", Range("D11"))
Sheets(ChartSheetName).Activate
For l = 1 To table.Rows.Count
With table.Rows(l).Columns
For Each it In ActiveSheet.ChartObjects
' See https://exceloffthegrid.com/…color-codes/#Long
' Proc je tu l a ne 1? Call LongToRGB(.Cells(l).Value, R, G, B)
Call LongToRGB(.Cells(l).Value, R, G, B)
' nejde nastavit barvu - run time error 1004 - because we have a limited number of columns in Excel. When our code gives the command to go out of range, we get a 1004 Error. There are other situations when we get this error when we refer to a range that does not exist in the sheet.
it.Chart.SeriesCollection(l).Fill.Visible = msoFalse
it.Chart.SeriesCollection(l).Fill.Visible = msoTrue
it.Chart.SeriesCollection(l).Fill.ForeColor.RGB = RGB(R, G, B)
' error: nelze ziskat vlastnost Interior tridy series!
' it.Chart.SeriesCollection(l).Interior.Color.RGB = RGB(R, G, B)
it.Chart.SeriesCollection(l).MarkerStyle = .Cells(2).Value
it.Chart.SeriesCollection(l).MarkerSize = .Cells(3).Value
it.Chart.SeriesCollection(l).MarkerForegroundColor = .Cells(4).Value
Next it
End With
Next
End Sub
Chyby, které to hlásí viz komentáře. Barva čáry je na Office XP pod fill.forecolor oproti novějším verzím kde to je pod format... Takže v jednom místě mi to hlásí
run time error 1004
ale přitom ty další formáty které neobsahují RGB jdou zpřístupnit a nastavit bez problémů. Vlastnost fill.forecolor.RGB nejde zpřístupnit ani v kukátku. A zkoušel jsem nastavit
it.Chart.SeriesCollection(0) nebo
it.Chart.SeriesCollection(1), ale asi se to má iterovat od jedničky...
Nějaký nápad jak to rozjet?