Excel - hromadná změna řad grafu
Zdravím,
mám dva grafy, první se skládá z 205 řad, druhý ze 100 řad. Klikat ručně na každou řadu, abych změnil barvu, tloušťku čáry a formát značek se mi nechce. Mohl bych zkopírovat 305x makro co je níže (pouze bych měnil číslo kolekce), ale i tak by mě zajímalo, není-li nějaký jednodušší způsob - všechny řady mají mít stejný formát.
Předem díky
ActiveChart.FullSeriesCollection(1).Select
With Selection.Format.Line
.Visible = msoTrue
.Weight = 3
End With
Selection.MarkerStyle = -4142
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
Makro samozřejmě nemusíš kopírovat, stačí Ti jednoduchý cyklus:
Jinak to asi* nejde.
* Píšu "asi", protože cokoliv v Excelu se dá dělat několika způsoby, které nemusím znát.
A jó
Díky
Ahoj,
přesně tohle co popisuješ bych potřeboval, resp. trochu modifikovanou. Mám bodový graf, tvořený cca 100 řadami a potřeboval bych aby každá polovina měla stejnou barvu. A opravdu se mi nechce upravovat každou řadu zvlášť. Mohl by mi někdo s tímto problémem pomoci? Jde o to že makra vůbec neovládám... :(
Moc díky
Napíš do makra:
Sub StejnaBarvaPoloviny()
For i=1 to cca 100
If Rada(i).polovina.barva <> StejnaBarva then
Rada(i).polovina.barva = StejnaBarva
End If
Next i
MsgBox "Presne tohle resp trochu modifikovane je hotovo"
End Sub
Teda... ak som to správne pochopil...
P.S. Makro sa píše do editora VBA na karte Vývojár
Aký dotaz, taká odpoveď
Dik moc za odpověď, nakonec jsem se tím prokousal a možná složitěji vytvořil tohle makro:
Sub Makro1()
'
' Makro1 Makro
'
'
ActiveSheet.ChartObjects("Graf 1").Activate
For i = 1 To 50
' počet řad, které mají být změněny - barva 1
ActiveChart.FullSeriesCollection(i).Select
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(237, 125, 49)
'oranžová
.Transparency = 0
End With
With Selection.Format.Line
.Visible = msoTrue
.Weight = 0.75
End With
Next i
ActiveSheet.ChartObjects("Graf 1").Activate
For i = 51 To 100
' počet řad, které mají být změněny - barva 2
ActiveChart.FullSeriesCollection(i).Select
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(91, 155, 213)
'modrá
.Transparency = 0
End With
With Selection.Format.Line
.Visible = msoTrue
.Weight = 0.75
End With
Next i
End Sub
Môj predošlý príspevok bol mienený ironicky, mieriac na to, že ťažko pochopiť, ako to myslíš. Ak Ti to však poskytlo inšpiráciu, tak som rád
Najlepšie je poskytnúť predlohu.
Keďže naďalej pracujeme bez predlohy, tak v prípade, že Ti funguje ten Tvoj kód, tak potom jeho zjednodušenie by malo vyzerať takto:
Jedná sa o "vyňatie" rovnakého dielu kódu (pomocou With) namiesto jeho otrockého duplikovania a využitie spoločného cyklu od 1 do 100 s rozlíšením intervalov (pomocou Select Case).
Okrem toho, pokiaľ sa .Visible, .Transparency a .Weight nelíšia od defaultu, je možné ich vynechať. No a Application.ScreenUpdating=False Ti vypne prekresľovanie po jednotlivých radách a výsledok sa naraz zobrazí až po prebehnutí celej operácie.
P.S. No a keďže v prípade, že Tvoj kód fungoval, tak už to máš poriešené a keďže úloha je jednorazová, tak Ti moja odpoveď pomôže už len nabudúce, pri úvahách o zjednodušeniach makier. Makrá nahraté záznamníkom majú totiž v sebe spústu nadbytočného balastu.
Díky moc za zjednodušení, jelikož jsem se do této doby zdárně makrům vyhýbal tak jsem jel stylem zapnout záznamník vytvořit nějaké makro a potom ty jednotlivé makra "napasovat" za sebe.
Byla to pro mne jediná cesta jelikož netuším co znamenají tebou zmíněné funkce With, Select Case,...
(btw. nějaký zdroj kde se o těchto funkcích dozvědět více?)
Každopádně děkuji za zjednodušení, můj kód trval celkem dlouho než přebarvil celý graf, tvůj kód je hned (předpokládám že za to může to vypnutí překreslování po řadách).
Áno, rýchlosť je v zabránení prekresľovania po krokoch.
Trocha teórie k VBA (ale i k Excelu ako takému) napr:
https://office.lasakovi.com/excel/vba-teorie-zaklady/