Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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

Předmět Autor Datum
Makro samozřejmě nemusíš kopírovat, stačí Ti jednoduchý cyklus: For i = 1 to 205 With ActiveChart.S…
Machr55 08.08.2018 12:13
Machr55
A jó:-) Díky
qdj 08.08.2018 12:23
qdj
Ahoj, přesně tohle co popisuješ bych potřeboval, resp. trochu modifikovanou. Mám bodový graf, tvoře…
mara5740 17.09.2020 11:33
mara5740
Napíš do makra: Sub StejnaBarvaPoloviny() For i=1 to cca 100 If Rada(i).polovina.barva <> StejnaBar…
robert13 19.09.2020 07:19
robert13
Dik moc za odpověď, nakonec jsem se tím prokousal a možná složitěji vytvořil tohle makro: Sub Makro…
mara5740 21.09.2020 09:39
mara5740
Môj predošlý príspevok bol mienený ironicky, mieriac na to, že ťažko pochopiť, ako to myslíš. Ak Ti…
robert13 21.09.2020 13:01
robert13
Díky moc za zjednodušení, jelikož jsem se do této doby zdárně makrům vyhýbal tak jsem jel stylem zap…
mara5740 22.09.2020 10:37
mara5740
Áno, rýchlosť je v zabránení prekresľovania po krokoch. Trocha teórie k VBA (ale i k Excelu ako také… poslední
robert13 22.09.2020 11:07
robert13

Makro samozřejmě nemusíš kopírovat, stačí Ti jednoduchý cyklus:

For i = 1 to 205
  With ActiveChart.SeriesCollection(i)
    ...
  End With
Next i

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.

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:

Sub PrebarveniGrafu()
Application.ScreenUpdating = False
ActiveSheet.ChartObjects("Graf 1").Activate
    For i = 1 To 100
        With ActiveChart.FullSeriesCollection(i).Format.Line
            .Visible = msoTrue
            .Transparency = 0
            .Weight = 0.75
            Select Case i
                Case Is < 51
                    ' počet řad, které mají být změněny - barva 1
                    .ForeColor.RGB = RGB(237, 125, 49) 'oranžová
                 Case Is > 50
                    ' počet řad, které mají být změněny - barva 2
                    .ForeColor.RGB = RGB(91, 155, 213) 'modrá
            End Select
        End With
    Next i
End Sub

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).

Zpět do poradny Odpovědět na původní otázku Nahoru