Přístup k listům
Listy jsou v definici proměnných objekty. Pro přístup k listu musíte nejprve mít zpřístupněný dokument.
doc = thisComponent oListy = doc.Sheets()
Po zpřístupnění dokumentu přiřadíte všechny listy do proměnné oListy. Pokud chcete pracovat pouze s jedním listem, musíte určit programu, s kterým, a to buď určením jeho jména, nebo jeho pořadí (indexu):
oList = doc.sheets.getByName("List1")
nebo
oList = doc.sheets(0) / oList = doc.sheets.getByIndex(0)
Přístup podle jména je bezpečnější, protože se nemůže stát, že zapomenete započítat skryté listy. Ale všude tam, kde budete provádět operace se všemi listy, použijete index (číslo lze nahradit proměnnou, která se pravidelně zvyšuje/snižuje).
Pokud dopředu víte, že nebudete pracovat s dokumentem jako celkem, ale pouze s listem, můžete zápis zkrátit takto:
oList = thisComponent.sheets.getByName("List1")
nebo
oList = thisComponent.sheets(0)
Jak vidíte, vypustili jste proměnnou dokumentu. Je ale lepší si dokument deklarovat zvlášť, nikdy nevíte, jak se bude náš kód vyvíjet a zda nakonec nebudete pracovat právě s dokumentem.
TIP: Toto byla jedna z věcí, která mě zpočátku trápila. Ke konci psaní makra jsem zjistil, že potřebuji pracovat i s dokumentem, a přepisoval jsem kód. Pokud spěcháte, stačí si dokument deklarovat do nové proměnné třeba na konci makra, ale zbytečně tak zanášíte kód, protože jde v podstatě o duplicitní deklaraci.
Ve všech dalších příkladech budete používat kratší definici doc.sheets(0)
.
Procházení listů
Pokud budete pracovat se všemi listy dokumentu, máte několik možností, jak listy projít a průběžně s nimi pracovat.
První takovou možností je listy spočítat a pomocí cyklu je projít. Na spočítání máte v Basicu funkci count, pomocí které jste schopni zjistit poslední volnou pozici v definovaných proměnných.
oListy = doc.sheets.Count – 1
Protože chcete zjistit pořadí posledního listu, musíte na konci příkazu odečíst 1.
Následujícím příkladem zjistíte pořadí všech listů v sešitu
sub prochazej_listy dim list as object oListy = thisComponent.Sheets for i = 0 to oListy.getCount – 1 list = oListy(i) print i next i end sub
Pokud zadáte v příkazu print
místo i hodnotu
list.name
, vrátí makro názvy všech listů v sešitu.
Přidání
Pro přidání listu použijete následující příkaz, kde musíte specifikovat jméno a umístění listu:
doc = thisComponent listy = doc.sheets listy.insertNewByName("Nový list",0)
Příkaz insertNewByName
vloží list, první údaj v závorce je vámi určené jméno listu a
druhý údaj je pořadí, na jaké chcete list vložit. Pořadí nemusíte zadávat číselně, pokud budete přidávat vždy na
konec sešitu, místo nuly zadáte listy.count
.
Vložení nového listu na první pozici
Přesunutí
Obdobně jako vkládání funguje i přesouvání listů, jen místo insertNewByName
použijete
MoveByName
:
presun_list = listy.MoveByName("Nový list",1)
Údaje jsou opět v závorce: název listu, který chcete přesunout, a pořadí, kam ho přesouváte.
Přesunutí listu na druhou pozici
Kopírování
Nyní je kopírování již hračka:
listy.CopyByName("Nový list","Zkopírovaný list",0)
Údaje v závorce – název zdrojového listu, název zkopírovaného listu a pořadí umístění.
Zkopírování "Nového listu" a vložení na první pozici
Odstranění
listy.RemoveByName("Nový list")
Přejmenování
Pro přejmenování nejdříve musíte vybrat list a pak mu určit jméno.
listy.getByName("Zkopírovaný list").name("Přejmenovaný list")
Zkuste si zapsat následující makro, které spustíte v sešitu, příkaz Wait 500
zadrží
vykonání příkazů na 500 milisekund a uvidíte, jak se listy mění.
sub prace_s_listy listy=thiscomponent.sheets listy.insertNewByName("Nový list",0)' wait 500 listy.MoveByName("Nový list",1) wait 500 listy.copyByName("Nový list","Zkopírovaný list", 0) wait 500 listy.RemoveByName("Nový list") wait 500 listy.getByName("Zkopírovaný list").setName("Přejmenovaný list") end sub
Skrývání a zobrazování
Pokud chcete pomocí makra skrýt, nebo zobrazit určitý list, slouží k tomu vlastnost IsVisible :
doc = thisComponent list = doc.sheets(0) list.IsVisible = True
a pro zobrazení
list.IsVisible=False
navíc můžete ještě zjistit, zda je list skrytý
if list.IsVisible then
tento zápis vrátí True, pokud je list viditelný.
Ochrana listu
Stejně jako můžete uzamknout dokument proti změnám, můžete uzamknout i jednotlivé listy:
doc = thisComponent list = doc.sheets(0) list.Protected("Heslo") nebo list.Protected("") list.Unprotect("Heslo") nebo list.Unprotect("")
a zjištění, zda je list chráněn
if list.IsProtected = True then
Zamčení listu souvisí s uzamykáním buněk. Popis na uzamčení buněk najdete v některém z dalších dílů o buňkách.
Základní práce s listy je zde popsána. V příštím díle se budeme věnovat řádkům, sloupcům a práci s nimi.