< návrat zpět
MS Excel
Téma: VBA tvorba grafu z viacerých zdrojov
Zaslal/a Cedrom 24.1.2018 19:44
Dobrý deň,
Grafy cez VBA nikdy neboli moja parketa...preto Vás chcem poprosiť o radu ako na to.
Mám veľa súborov (EXCEL-2010) na sieti, z ktorých chcem získavať podklady a v tom aktuálnom (rok 2018) robiť z toho graf. V prílohe uvádzam jednoduchý príklad. Súbory majú listy štandardne rozdelené podľa mesiacov, jeden súbor jeden rok.
Plus som tam doplnil jeden list - GRAFY, kde by sa to malo celé "graficky zobrazovať".
Pri tvorbe som narazil na problém ako podchytiť zmenu tohto ovládacieho prvku na grafe. Videlo sa mi to ako jednoduchšia možnosť ako ísť cez formuláre, ale teraz neviem...
Vie ma niekto nakopnúť, ani na iných fórach som zatiaľ nič nenašiel
Dopredu vďaka za Váš čas!
Příloha: 39202_graf_2017.rar (32kB, staženo 40x)
MePExG(24.1.2018 21:07)#039203 Dobrý deň. Ponúkam riešenie iba pomocou vzorcov a dalo by sa problém riešiť aj pomocou kontingenčného grafu. Ak by ste chceli, môžem Vám vypracovať riešenie (načítanie) aj pomocou PowerQuery (doplnok od 2010, v verzii 2016 je už tento nástroj obsiahnutý).
Příloha: 39203_graf_2017.xlsx (83kB, staženo 38x) citovat
Vovka(24.1.2018 21:07)#039204 Zpravidla se vytvoří ručně sada grafů, u nichž se pak přes VBA mění zdroj dat, obsažených v připojených a měnících se tabulkách. Vytváření samotných grafů pomocí VBA je samozřejmě možné, ale dost náročné. Asi nejlepší a nejjednodušší je pomocí záznamníku maker zapsat si ruční vznik grafu a vzniklý kód pak přizpůsobit specifickým požadavkům. Pokud se v tom neutopíte, pusťte se do vlastní tvorby. Je to dobrá hračka, plná různých překvapení...
citovat
misocko(25.1.2018 13:01)#039215 plne suhlasim v Vovka
vytvarat grafy makrom = plne prekvapeni
ak nechces prekvapenia, iba pripravuj data pre graf makrom
citovat
Cedrom(25.1.2018 15:16)#039216 Problémom je, že použitie záznamníku makier pri ovládacích prvkoch na grafe nezaznamená nič.
Zber údajov už mám ako-tak zvládnuté, len sa mi nedarí podchytiť procedúru zmeny ovl. prvku combo box na grafe.
citovat
Vovka(25.1.2018 18:15)#039221 Zřejmě pracujete s Excelem 2007, který měl mnoho nedodělků, ke kterým patřilo právě to, že neuměl zpracovat kód pro grafy. V Excelu 2010 už to fungovalo. Na ukázku přikládám proceduru, která graf vytváří. Udělal jsem si ji před lety na zkoušku a dost dlouho jsme ji musel ladit.
Sub VykresliGraf(Start As Date)
Dim N As Long
With Cells(2, 2).CurrentRegion
N = .Row + .Rows.Count - 1
End With
ActiveSheet.Shapes.AddChart.Select
With ActiveChart ' typ grafu a zdroj dat
.ChartType = xlXYScatterLinesNoMarkers
.SetSourceData Source:=Range("K3:P" & N)
End With
With ActiveSheet.ChartObjects(1) ' jméno grafu, polha a rozměry
.Name = "Kumulace"
.Left = Cells(2, 18).Left
.Top = Cells(2, 18).Top
.Width = 700: .Height = 420
End With
With ActiveSheet.Shapes("Kumulace").Fill ' výplň rámu pro graf
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.BackColor.ObjectThemeColor = msoThemeColorAccent1
.BackColor.TintAndShade = 0
.TwoColorGradient msoGradientHorizontal, 1
End With
With ActiveChart
.SeriesCollection(5).Format.Line.ForeColor.RGB = RGB(255, 0, 0) ' barva pro 5.datovou řadu
.SetElement (msoElementChartTitleAboveChart) ' název grafu (nad grafem)
Selection.Caption = "Časové vyhodnocení výnosů z vyhraných dražeb k " & Format(Now, "d/m/yyyy")
.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) ' titulek vodorovné osy
Selection.Caption = "Čas ve dnech od " & Format(Start, "d/m/yyyy")
.SetElement (msoElementPrimaryValueAxisTitleRotated) ' titulek svislé osy (otočený)
Selection.Caption = "Finanční objem v Kč"
.HasAxis(xlValue) = True ' nastavení tloušťky os
.Axes(xlCategory).Format.Line.Weight = 1.5
.HasAxis(xlValue) = True
.Axes(xlValue).Format.Line.Weight = 1.5
.SetElement (msoElementPrimaryValueGridLinesMinorMajor) ' nastavení mřížky hodnot
.Axes(xlCategory).HasMajorGridlines = True
.Axes(xlCategory).MajorGridlines.Format.Line.Weight = 1.5
.SetElement (msoElementPrimaryCategoryGridLinesMinorMajor) ' nastavení mřížky kategorií
.Axes(xlValue).HasMajorGridlines = True
.Axes(xlValue).MajorGridlines.Format.Line.Weight = 1.5
End With
ActiveSheet.ChartObjects("Kumulace").Activate ' výplň oblasti dat
ActiveChart.PlotArea.Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 255, 153)
.Solid
End With
End Subcitovat
Cedrom(25.1.2018 18:26)#039222 Vovka:
Ďakujem za návrh, ale v tvorbe-úprave samotného grafu cez VBA nevidím až taký problém (to mi už pracuje celkom spoľahlivo). Problém je, že na Chart mám dva ovl. prvky typu combo box (viď pôv. príloha) a u tých neviem podchytiť ich zmenu, t.j. užívateľ vyberie mesiac 02/2017 aneb 11/2016 a pod.
Verziu mám EXCEL-2010 a túto zmenu neviem podchytiť ani cez záznamník makier...
citovat
Vovka(25.1.2018 19:17)#039226 Dokud si ty své combo boxy nepropojíte s nějakou buňkou, jejíž hodnotu pak půjde testovat, nejspíš nic nepodchytíte. Ve vašem VBA jsem ale neobjevil, že byste se pokoušel testovat zvolený rok.
citovat
Cedrom(26.1.2018 19:34)#039244 Vovka:
ÁNO máte pravdu, prepojenie na bunku (na liste)+ spárovanie s makrom je zatiaľ jediné funkčné riešenie. Síce som sa chcel tomu vyhnúť, ale iné riešenie zatiaľ neviem rozchodiť.
Testovanie "roka" som do príkladu nedával, pre komplikované testovanie adresárov, exis. súborov, ich otv. a podobne. S týmto som Vás nechcel zaťažovať.
citovat