Pohyb v buňkách pomocí kurzoru

calc.png V minulém díle jste se naučili vyhledávat buňky jiným způsobem než zadáním jejich adresy (podle jejich vlastností). Možnosti programovacího jazyka zde ale nekončí. V tomto díle se dozvíte o pohybu v buňkách pomocí vytvořeného kurzoru. Kurzor v tomto případě neznamená známou "blikající" čárku zobrazenou na monitoru, ale způsob, jakým pomocí makra provádíte pohyb v listu sešitu.  

Vytvoření kurzoru

Nejprve musíte kurzor vytvořit. Stejně jako při práci s myší umísťujete kurzor do určité buňky. Tato buňka musí být definována adresou nebo pomocí aktuálního výběru.

doc = thisComponent
list = doc.sheets(0)
bunka = list.getCellByRange("C4")
kurzor = list.createCursorByRange(bunka)

Pro účely testování si vytvořte list s vyplněnými buňkami A1:D5. Na této oblasti budete testovat následující příkazy.

Metody k pohybu pomocí kurzoru

Po vytvoření kurzoru již zadáváte příkazy, které ho přímo ovlivňují. Ve všech příkladech tedy budeme pracovat s proměnnou kurzor.

Před samotnými příkazy je ale nutné znát pojem souvislá oblast. Souvislá oblast označuje oblast neprázdných buněk, které spolu přímo sousedí. Pokud se buňky v jakémkoli bodě dotýkají, jsou pro makro spojené. Mezi buňkami musí být jeden řádek a zároveň jeden sloupec, aby je program identifikoval jako nespojené. Toto je velmi důležité, protože při nesprávném použití bude výsledek diametrálně odlišný od požadovaného chování makra.

Tip: nezapomeňte, že přirozený pohyb kurzoru je směrem doprava a dolů, všechny příkazy fungují na tomto principu.

Přejít na jednu buňku

Nejprve sada příkazu, pomocí kterých přesunete kurzor pouze na jednu buňku.

Příkaz gotoStart()

Přejde na první použitou buňku (levá horní) v souvislé oblasti buněk. Pokud je tato aktuálně vybraná (kurzor v sešitu se nachází právě na této buňce), je vybrána tato buňka.

Pro lepší představu použijte obarvování pozadí v makru.

kurzor.gotoStart()
kurzor.CellBackColor = RGB(0,0,255) 

Výsledek příkazu – první buňka souvislé oblasti A1 Výsledek příkazu – první buňka souvislé oblasti A1

Příkaz gotoEnd()

Tento příkaz je opakem gotoStart(). Po tomto příkazu přejde kurzor na poslední buňku ve spojité oblasti.

kurzor.gotoEnd()
kurzor.CellBackColor = RGB(255,0,0)

Výsledek příkazu – poslední buňka v souvislé oblasti D5 Výsledek příkazu – poslední buňka v souvislé oblasti D5

Příkaz gotoOffset(sloupec, radek)

Často potřebujete vybrat buňku, ale dopředu neznáte její polohu (poloha je například výsledkem makra). Možností je polohu zjistit a následně adresovat pomocí getCellByPosition. Pokud ale znáte aktuální polohu kurzoru, využijte příkazu gotoOffset. Příkaz vyžaduje dva argumenty – počet sloupců a počet řádků. Tato čísla určují, o kolik sloupců a řádků má být kurzor posunut, přičemž posun je realizován doprava u sloupců a dolů u řádků, záporná hodnota posouvá kurzor doleva a nahoru.

kurzor.gotoOffset(2,2)
kurzor.CellBackColor = RGB(0,255,0)

Výsledek příkazu – buňka posunutá o dva sloupce a dva řádky E6 Výsledek příkazu – buňka posunutá o dva sloupce a dva řádky E6

Příkaz gotoPrevious()

Pomocí tohoto příkazu přesunete kurzor na nejbližší předchozí neuzamčenou buňku. Ve většině případů se jedná o buňku vlevo od aktuální buňky. Nezapomeňte, že jste kurzor vytvořili v buňce C4.

kurzor.gotoPrevious()
kurzor.CellBackColor = RGB(255,0,0)

Výsledek funkce – první neuzamčená buňka vlevo C3 Výsledek funkce – první neuzamčená buňka vlevo C3

Příkaz GotoNext()

Přesune kurzor na nejbližší dostupné nechráněné buňky. Ve většině případů se jedná o buňku vpravo od aktuální buňky.

kurzor.gotoNext()
kurzor.CellBackColor = RGB(0,255,0)

Výsledek funkce – první neuzamčená buňka vpravo C5 Výsledek funkce – první neuzamčená buňka vpravo C5

Přejít na oblast buněk

Následující příkazy již dávají za výsledek oblast buněk.

Příkaz collapseToCurrentRegion()

Pomocí tohoto příkazu se z definované buňky, kde jste vytvořili kurzor, přesunete na celou souvislou oblast buněk.

kurzor.collapseToCurrentRegion()
kurzor.CellBackColor = RGB(0,0,255)

Výsledek funkce - celá souvislá oblast A1:D5 Výsledek funkce - celá souvislá oblast A1:D5

Příkaz collapseToCurrentArray()

Méně využijete příkaz, který funguje na stejném principu, ale pouze tehdy, pokud buňka, ve které byl kurzor vytvořen, obsahuje maticový vzorec. Výsledkem bude oblast buněk s maticovým vzorcem. Jestliže buňky mají jiný obsah, kurzor se nemění.

kurzor.collapseToCurrentArray()
kurzor.CellBackColor = RGB(0,0,255)

Příkaz collapseToMergedArea()

Stejný princip využívá také další příkaz, který umí vybrat sloučené buňky. Při použití označí všechny sloučené buňky, podmínkou je, že se buňka, ve které se kurzor vytvořil, nachází v takové oblasti. V opačném případě je kurzor ponechán beze změny. Tento příkaz použijte pouze v případě, že chcete ovlivnit pouze sloučené buňky.

kurzor.collapseToMergedArea()
kurzor.CellBackColor = RGB(0,0,255)

Příkaz expandToEntireColumns()

Tímto příkazem označíte celý sloupec, ve kterém byl kurzor vytvořen.

kurzor.expandToEntireColumns()
kurzor.CellBackColor = RGB(0,0,255)

Výsledek funkce – celý sloupec C Výsledek funkce – celý sloupec C

Příkaz expandToEntireRows()

Stejná funkce, ale pro řádek.

kurzor.expandToEntireRows()
kurzor.CellBackColor = RGB(0,0,255)

Výsledek funkce – celý řádek 4 Výsledek funkce – celý řádek 4

Příkaz collapseToSize(sloupec, radek)

Obdobou příkazu gotoOffset je příkaz collapseToSize(sloupec, radek). Rozdíl spočívá v tom, že zde je výsledkem oblast namísto jedné buňky.

kurzor.collapseToSize(2,2)
kurzor.CellBackColor = RGB(0,0,255)

Výsledek funkce – oblast buněk se začátkem v C4 rozšířená o dva sloupce a dva řádky C4:D5 Výsledek funkce – oblast buněk se začátkem v C4 rozšířená o dva sloupce a dva řádky C4:D5

Příkaz gotoStartOfUsedArea(boolean)

Tento příkaz přesune kurzor na začátek všech používaných buněk. Vyžaduje parametr TRUE nebo FALSE, který určuje, zda bude označena pouze jedna buňka (FALSE), nebo celá oblast (TRUE). Tento příkaz nerozlišuje mezi souvislými a nesouvislými oblastmi buněk.

kurzor.gotoStartOfUsedArea(True)
kurzor.CellBackColor = RGB(0,0,255)

Výsledek funkce – oblast od místa kurzoru po první použitou buňku v sešitu A1:C4 Výsledek funkce – oblast od místa kurzoru po první použitou buňku v sešitu A1:C4

Příkaz gotoEndOfUsedArea(boolean)

A stejným způsobem se dostanete na poslední použitou buňku. Předtím si ale vyplňte například buňku F7, nebo jinou mimo souvislou oblast.

kurzor.gotoEndOfUsedArea(True)
kurzor.CellBackColor = RGB(0,0,255)

Výsledek funkce – oblast od místa kurzoru po poslední použitou buňku C4:F7 Výsledek funkce – oblast od místa kurzoru po poslední použitou buňku C4:F7

Příklad využití

Praktických využití může být mnoho. Například chcete zpracovávat dokument, který má neměnnou strukturu, ale nemůžete dopředu zjistit její celkový rozsah (počet řádků). Buňky v sešitu jsou sytě barevně zvýrazněny. Při tisku na černobílé tiskárně dochází k tomu, že se dokument stává nečitelným. Tento dokument dostáváte pravidelně a musíte jej vždy tisknout. Navíc autor používá nestandardní písmo, které se nesprávně interpretuje na vašem PC. Právě v tento okamžik použijete kurzorové příkazy.

sub uprava_tabulky
doc = thisComponent
list = doc.sheets(0)
bunka = list.getCellRangeByName("B2")
kurzor = list.createCursorByRange(bunka)
kurzor.gotoStartOfUsedArea(False)
kurzor.gotoEndOfUsedArea(True)
kurzor.CellBackColor = RGB(255,255,255)
kurzor.CharFontName = "Arial"
end sub
(Jako ve škole) Průměr: 1,00 | Hodnotilo: 2
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Daniel Sedláček

Daniel Sedláček

Amatérsky se věnuji programování maker od podzimu 2010.
Aktivní jsem na fóru od ledna 2011.
Od července 2011 spolupracuji i jako moderátor fóra.

Využívám pouze OpenOffice.org (LibreOffice nemám nainstalován).

 
 
 
woo jaw demo hz