Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  3 4 5 6 7 8 9 10 11   další » ... 36

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.

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

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

Tak tady je zase obrázek z mých šachů s rozehranou partií. Hlídá to pořadí a oprávněnost tahů včetně šachů, rošád a braní mimochodem. Umí měnit pěšce za figuru. Partii je možno vrátit o libovolný počet tahů zpět. Může posloužit jako šachy pro dva hráče i pro analýzu šachových úloh. Hru proti počítači to neumí.

Já tento případ vyhodnocuji jako závažnou chybu chování Excelu. Rozkopírování vzorce by mělo ve všech případech vést na úplnou kopii vzorce pro zápis v notaci R1C1. V tomto případě zní rozkopírované vzorce pro B1:B5 následovně:
=SUM(RC1:R2C[-1])
=SUM(RC1:R2C[-1])
=SUM(R2C1:RC[-1])
=SUM(R2C1:RC[-1])
=SUM(R2C1:RC[-1])
Počínaje vzorcem v B3 se zápis R1C1 mění, což je jasné porušení pravidla o rozkopírování vzorců. S tím jsem se zatím nikde nepotkal.

Co asi takhle:
=VELKÁ(ZLEVA(A2;1)) & MALÁ(ZPRAVA(A2;DÉLKA(A2)-1))

Pokud jsem správně pochopil požadavek, měla by ho splnit následující událostní procedura, umístěná v objektu ThisWorkbook:
Private Sub Workbook_Open()
With Sheets("Chráněný List")
.Unprotect Password:="Heslo"
With .UsedRange
.Locked = False
.SpecialCells(xlCellTypeConstants).Locked = True
.SpecialCells(xlCellTypeFormulas).Locked = True
End With
.Protect Password:="Heslo"
End With
End Sub
Literály Chráněný list a Heslo je nutno nahradit skutečným jménem listu a vlastním heslem.

Již dlouho používám pro zasílání e-mailů z Excelu (i s více adresáty a s přílohami) proceduru od C.Pearsona, která se obejde bez služeb Outlooku. Bližší informace lze nalézt na http://www.cpearson.com/excel/Email.aspx

Přikládám pomůcku, která pomocí KT vytvoří seznam unikátů, případně doplněný o frekvence výskytu jednotlivých unikátů ve zdrojovém seznamu.

Chyba bude jinde. Následuje pokusný kód:
Sub Pokus()
Dim AA, BB
AA = Range("A1:E60000")
BB = Range("F1:K60000")
MsgBox AA(60000, 5) & " " & BB(60000, 5)
End Sub
Zdrojové buňky jsem naplnil a proceduru jsem spustil. Proběhla bez závad bez hlášení jakékoliv chyby.

Tím, že zrušíte KT a ponecháte si jen její data, se samozřejmě ztratí kouzlo té KT, aby se mohla aktualizovat podle změn ve zdrojových datech.
Pro schopnost aktualizace KT je důležité také převést zdrojovou tabulku na ExcelTable, jak to provedl eLCHa. Taková tabulka bude automaticky reagovat i na změnu počtu řádků po "Obnovit" (bez nutnosti redefinovat zdrojovou oblast).

Excel není pro psaní her moc vlídné prostředí, zejména když je nutné řešit problémy s pohybem, s grafikou a interakcemi mezi objekty. Na hrách pro Excel bývají proto zajímavější techniky, použité pro řešení takových problémů, než hra samotná. Někdy je dokonce možné takové techniky použít i pro vážnější věci, než jsou hry.
Předpokládám, že jako mnozí jiní, jsem za dlouhá léta s Excelem napsal řadu her. Od simulátorů pro Rubikovu kostku a šachy, hry proti počítači jako je Reversi, skládačky typu Splitting Images k rébusům jako "15", Pexeso nebo hry s pohybem (jako je Tetris nebo Pacman). Asi nejvíc času pro hry jsem věnoval sudoku. Mnohé z těchto her lze najít na internetu v profesionálnější podobě ve vhodnějším prostředí, než je Excel. Jejich realizace v Excelu byla pro mne laboratoří pro hledání technik, které by umožnily splnit mnohé neobvyklé požadavky, vedoucí k požadovanému chování úlohy. Proto nepokládám psaní her v Excelu za ztracený čas, ale za zdroj poučení pro vývojáře.

Řešení od eLCHa je samozřejmě řešitelsky nejjednodušší. Převod vstupní tabulky na ExcelTable není nezbytný (účelný ovšem je).
Pokud by Vám výsledek v podobě KT nevyhovoval, pak vytvořenou KT převedete snadno na prostou datovou oblast následovně:
- vyberte celou KT do schránky pomocí Ctrl+C
- prostřednictvím Domů / Vložit / Hodnoty vraťte obsah schránky na list; KT na listu ponechá svá data a sama zmizí.

Pro ty, kteří si stáhli první přílohu a nechtějí stahovat tu druhou: heslo k VBA projektu Pacmana je VOJTA2004

Chybka se vloudila 7 ! V nové příloze to už snad bude lepší...


Strana:  1 ... « předchozí  3 4 5 6 7 8 9 10 11   další » ... 36

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse