Skip to main content

Programování v Excelu 2010 a 2013 (Ukázka, strana 99)

Page 1

Příklad řazení podle uživatelského seznamu: Dim trideni As Sort Set trideni = ActiveSheet.Sort trideni.SortFields.Add Range("B2:B6"), , , _ ("pondělí,úterý,středa,čtvrtek,pátek,sobota,neděle")

V parametru CustomOrder můžete zapsat libovolný textový řetězec. Je proto možné vytvořit řazení i podle textů, které nejsou zařazeny mezi vlastní seznamy.

Seřazení tabulky Vlastní výkonný příkaz pro seřazení je metoda Apply objektu Sort. Před spuštěním této metody je zapotřebí nastavit některé vlastnosti, které určují způsob řazení: ❚ SetRange – oblast tabulky, která se má seřadit. Použijete odkaz Range, do kterého zahrnete i řádek s hlavičkami sloupců. ❚ Header – tabulka se záhlavím nebo bez záhlaví. Hodnotami jsou konstanty VBA xlNo (výchozí) – bez záhlaví, xlYes – se záhlavím, xlGuess – typ tabulky se určí automaticky. ❚ Orientation – směr řazení. Hodnotami jsou konstanty VBA xlSortColumns – ve sloupci (shora dolů), xlSortRows – v řádku. ❚ MatchCase – hodnota True znamená, že se při řazení rozlišují malá a velká písmena, hodnota False (výchozí) je nerozlišuje. Příklad: Dim trideni As Sort trideni.SetRange Range("B2:E60") trideni.Header = xlYes trideni.Orientation = xlSortColumns trideni.Apply

Protože je výchozí hodnotou parametru Orientation konstanta xlNo, tabulka se automaticky předpokládá bez hlavičky (což je přesně opačně, než při uživatelské práci). U parametru Orientation se v nápovědě jako výchozí hodnota uvádí xlSortRows, tedy třídění v řádcích. Nicméně pokud nastavení této vlastnosti vynecháte, tabulka se setřídí ve sloupcích shora dolů. Z toho plyne jediné doporučení: používejte tyto vlastnosti vždy a vyhnete se nepříjemným překvapením. V sešitu Pokrocile_techniky.xlsm vytvořte makro, které tabulku na listu Řazení seřadí takto: v prvé úrovni podle barvy pozadí ve sloupci B (žlutá nahoře), ve druhé úrovni podle barvy písma ve sloupci C (červená nahoře), ve třetí úrovni vzestupně podle hodnot ve sloupci D. V sešitu Pokrocile_techniky.xlsm je toto makro vytvořeno pod názvem Razeni.

98  Programování v Excelu 2010 a 2013

Ukázka elektronické knihy, UID: KOS196056


7.8 Práce s konci stránek Všechny vodorovné konce stránek, které se při tisku listu uplatní, tvoří kolekci HPageBreaks. Tato kolekce se vztahuje k určitému listu, tedy k objektu Activesheet nebo Worksheet. Obdobně kolekce VPageBreaks obsahuje všechna svislá rozdělení stránky. Do těchto kolekcí se zahrnují všechny vodorovné a svislé konce stránek, ležící v oblasti UsedRe­ gion, a nerozlišuje se, zdali se jedná o konec automatický nebo vložený ručně. Pomocí vlastnosti Count zjistíte počet konců stránek: Dim list As Worksheet Set list = ActiveSheet MsgBox list.HPageBreaks.Count Jednotlivé členy kolekcí HPageBreaks a VPageBreaks mají vlastnost Type, která určuje typ zakončení: konstanta xlPageBreakAutomatic je automatický zlom, konstanta xlPage­ BreakManual je ručně vložený konec stránky (kontextová nabídka zobrazuje také konstantu xlPageBreakNone). Každému konci stránky dále náleží objekt Location. Použitím vlastnosti Row pro vodorovný a Column pro svislý konec stránky zjistíte, kde konec stránky leží. Čísla řádků, na kterých je umístěn ručně vložený konec stránky, zjistíte např. kódem: Dim zlomy(1 To 100) Dim list As Worksheet Set list = ActiveSheet pocet = 0 For Each konec In list.HPageBreaks If konec.Type = xlPageBreakManual Then pocet = pocet+1 zlomy(pocet) = konec.Location.Row End If Next konec Přidání nového konce stránky provede metoda Add, jejímž parametrem je odkaz na buňku. Pro vložení ručního konce stránky před desátý řádek by se tedy použil kód: Dim list As Worksheet Set list = ActiveSheet list.HPageBreaks.Add Range("A10") Odstranění ručního konce stránky provede metoda Delete. U automatického konce stránky metoda vede na chybu: If ActiveSheet.HPageBreaks(1).Type = xlPageBreakManual Then ActiveSheet.HPageBreaks(1).Delete End If Pro práci s koncem stránek lze využít také vlastnost PageBreak, která náleží buňce. Hodnotami vlastnosti jsou konstanty VBA: xlPageBreakAutomatic – automatický konec stránky, xl­ PageBreakManual – ručně vložený konec stránky, xlPageBreakNone – bez konce stránky. Příkaz Range("A20").PageBreak = xlPageBreakManual

Pokročilé programovací techniky  99

Ukázka elektronické knihy, UID: KOS196056


konec stránky vloží a příkaz Range("A20").PageBreak = xlPageBreakNone jej odstraní. Vlastnost PageBreak výhodně použijete například při odstranění všech ručních konců stránky na listu. Využití metody Delete u kolekce HPageBreaks zde není možné, protože smazáním některého konce stránky se mění počet členů kolekce. Proto je nutné nejprve zapsat polohu všech ručně vložených konců stránky do indexované proměnné, a v dalším cyklu ruční konce stránek odstranit: Dim zlomy(1 To 100) Dim list As Worksheet Set list = ActiveSheet pocet = 0 For Each konec In list.HPageBreaks If konec.Type = xlPageBreakManual Then pocet = pocet+1 zlomy(pocet) = konec.Location.Row End If Next konec For i = 1 To pocet list.Cells(zlomy(i), 1).PageBreak = xlPageBreakNone Next i

V sešitu Pokrocile_techniky.xlsm vytvořte makro, které na listu Konce stránek vloží konce stránky za řádky, obsahující ve druhém sloupci text „Celkem“. V sešitu Pokrocile_techniky.xlsm je toto makro vytvořeno pod názvem Konce_stranek.

100  Programování v Excelu 2010 a 2013

Ukázka elektronické knihy, UID: KOS196056


Turn static files into dynamic content formats.

Create a flipbook
Programování v Excelu 2010 a 2013 (Ukázka, strana 99) by Kosmas-CZ - Issuu