< návrat zpět

MS Excel


Téma: VBA tvorba grafu z viacerých zdrojov rss

Zaslal/a 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 3
Dopredu vďaka za Váš čas!

Příloha: rar39202_graf_2017.rar (32kB, staženo 40x)
Zaslat odpověď >

#039203
MePExG
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: xlsx39203_graf_2017.xlsx (83kB, staženo 38x)
citovat
#039204
avatar
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
#039215
avatar
plne suhlasim v Vovka
vytvarat grafy makrom = plne prekvapeni
ak nechces prekvapenia, iba pripravuj data pre graf makromcitovat
#039216
avatar
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
#039221
avatar
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 Sub
citovat
#039222
avatar
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
#039226
avatar
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
#039244
avatar
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

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje