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
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
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
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
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
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
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
Příkaz expandToEntireRows()
Stejná funkce, ale pro řádek.
kurzor.expandToEntireRows() kurzor.CellBackColor = RGB(0,0,255)
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
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
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
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