Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

3. diel - Makrá pre prácu s konkrétnou bunkou, riadkom či stĺpcom

Minulá lekcie, Klasické Hello a úvod do OOP pre makrá , nás zoznámila s pojmom objekt, vlastnosť objektu a metóda objektu. V dnešnej lekcii sa pozrieme najmä na to, ako povedať, že chceme pracovať s konkrétnou bunkou, riadkom či stĺpcom (v aktuálnom liste). Vyskúšame a vysvetlíme si Offset, ktorý popisuje bunku či oblasť posunutú voči inej bunke či oblasti buniek.

Nižšie uvedené objekty sú rovnakého typu, možno teda predpokladať, že majú k dispozícii rovnaké vlastnosti a metódy.

Objekt ActiveCell - aktívna bunka

Zadanie: Zapíšte do aktívnej bunky hodnotu 100.

U ActiveCell budeme meniť hodnotu Value, teda ju priradíme pomocou =. Hodnotu možno vnímať ako číslo 100, alebo ako reťazec "100". V tomto prípade je to jedno, teda sa ponúka dve správne riešenia.

Sub zmen_aktivni()
    ' ActiveCell.Value = "100"  hodnota 100 je vnímána jako řetězec
    ActiveCell.Value = 100      'hodnota 100 je vnímána jako číslo
End Sub

Zadanie: V dialógovom okne prezrite adresu aktívnej bunky.

Vlastnosť Address obsahuje absolútnu adresu bunky, vlastnosť Row obsahuje číslo riadka a vlastnosť Column obsahuje číslo stĺpca. Keďže je pred vlastnosťami objekt ActiveCell, vzťahujú sa k nemu:

Sub adresa_aktivni()
    MsgBox "Absolutní adresa je " & ActiveCell.Address
    MsgBox "Řádek: " & ActiveCell.Row & " Sloupec: " & ActiveCell.Column
End Sub

Zadanie: Zapíšte do aktívnej bunky svoje krstné meno a do nasledujúcej (predchádzajúcej) bunky svoje priezvisko.

Zápis krstného mena prevedieme príkazom ActiveCell.Value = "Jméno", pre zápis priezviska sa musíme dostať do nasledujúcej (predchádzajúcej) bunky.

Pretože sa chceme v liste posunúť o určitý počet buniek od aktívnej bunky, použijeme Offset(RowOffset, ColumnOffset). Offset má dva parametre, ktorých hodnota musí byť celé číslo. Prvý parameter určuje o koľko riadkov a kam je posunutá cieľová bunka (0 neposúva sa, kladné číslo smerom nadol, záporné číslo smerom nahor). Druhý parameter určuje o koľko stĺpcov a kam je posunutá cieľová bunka (0 neposúva sa, kladné číslo smerom vpravo, záporné číslo smerom vľavo).

Teda od aktívnej bunky ActiveCell sa Posuňme do nasledujúcej bunky Offset(0, 1) a tam nás zaujíma vlastnosť Value. Použijeme tečkové notáciu. Pretože chceme hodnotu meniť, priradíme pomocou = novú hodnotu, v tomto prípade "Příjmení".

Sub jmeno_prijmeni_aktivni()
    ActiveCell.Value = "Jméno"
    ActiveCell.Offset(0, 1).Value = "Příjmení"
End Sub

Pri zápise do predchádzajúcej bunky miesto Offset(0, 1) bude Offset(0, -1) a zvyšok kódu zostáva. Ak by sme chceli priezvisko napísať do bunky pod, použijeme Offset(1, 0), do bunky nad Offset(-1, 0).

Posun v makrách v Microsoft Office Excel - Makrá v Microsoft Office

Objekt Cells - bunka

Pre určenie jednej konkrétnej bunky možno použiť Cells(Row, Column). Prvý parameter určuje číslo riadka bunky a druhý číslo stĺpca. Teda napríklad bunka A2 je Cells(2, 1), bunka B5 je Cells(5, 2), bunka C1 je Cells(1, 3).

Zadanie: Naprogramujte všetky zadania, ktoré ste riešili pre aktívny bunku, tentoraz pre bunku B5.

Riešenie je opäť veľmi jednoduché. Pôvodne sme pracovali s aktívnou bunkou ActiveCell, teraz chceme pracovať s bunkou B5 Cells(5, 2). ActiveCell nahradíme Cells(5, 2) a zvyšok zostane rovnaký.

Správne sa dalo predpokladať, že vlastnosti a metódy pre bunku, či už je to bunka aktívna alebo bunka s konkrétnou adresou, budú rovnaké. Zrovna tak iu oblastí sa dá s týmito vlastnosťami a metódami počítať.

Objekt Rows - riadok

Tento objekt je možné využiť pre určenie jedného riadku. Číslo riadku uvádzame v parametri.

Zadanie: Zmeňte farbu pozadia celého prvého riadku.

Budeme pracovať s prvým riadkom, teda Rows(1). Zaujíma nás výplň Interior a farba, čo je vlastnosť Color. Základné farby možno zapísať cez vbBarva, ako je uvedené v poznámkach. Okrem bielej vbWhite sú to základné farby v tlačiarni s farebným modelom CMYK (vbMagenta, vbCyan, vbYellow, vbBlack) a základné farby monitora s farebným modelom RGB (vbRed, vbGreen, vbBlue).

Ja mám radšej zápis využívajúce priamo farebný model RGB, kde sa farba skladá z troch zložiek. Prvý určuje množstvo červenej (Red), druhá zelené (Green) a tretí modrej (Blue). Hodnota je celé číslo od 0 do 255 vrátane.

Sub format_radek()
    Rows(1).Interior.Color = RGB(0, 0, 0) 'to samé jako vbBlack
End Sub

Pre zmenu farby možno použiť taktiež vlastnosť ColorIndex. Hodnotu xlNone použijeme, ak chceme mať bunku bez výplne, celočíselnú hodnotu, ak chceme bunku podfarbiť. Ukážeme si to v nasledujúcom príklade.

Zadanie: Zmeňte farbu pozadia piateho riadku, až na bunku bez výplne v druhom, treťom a šiestom stĺpci.

Zmena farby pozadia riadku pomocou makra v Exceli - Makrá v Microsoft Office

Budeme pracovať s piatym riadkom Rows(5) a jeho výplňou Interior. Pre vyfarbenie použijeme vlastnosť ColorIndex. Prvý riadok kódu zmení pozadie celého riadku a ďalšie potom zruší výplň v druhom, treťom a šiestom stĺpci.

Pri rušenie výplne chceme pracovať s konkrétnou bunkou, teda použijeme vlastnosť (a zároveň objekt) Cells. Objekt Rows(5) hovorí, že budeme pracovať s piatym riadkom. Za bodkou je potom bunka vztiahnutá k tomuto piatemu riadku. Preto píšeme Cells(1, 2), čo znamená v prvom riadku voči nadradené oblasti a druhom stĺpci, teda v bunke B5. Pokiaľ nie je uvedený nadradený objekt, je pravda, že bunka B5 je Cells(5, 2), ako je uvedené v predchádzajúcej časti textu. Ale pozor, pri uvedení nadradeného objektu sa všetko vzťahuje práve k nemu.

Sub format_radek_bunka()
    Rows(5).Interior.ColorIndex = 3
    Rows(5).Cells(1, 2).Interior.ColorIndex = xlNone
    Rows(5).Cells(1, 3).Interior.ColorIndex = xlNone
    Rows(5).Cells(1, 6).Interior.ColorIndex = xlNone
End Sub

Objekt Columns - stĺpec

Tento objekt je možné využiť pre určenie jedného stĺpca. Číslo stĺpca uvádzame v parametri.

Zadanie: Zmeňte farbu pozadia celého prvého stĺpca.

Riešenie bolo vysvetlené vyššie. Len pretože pracujeme s prvým stĺpcom, uvádzame Columns(1) a je použitý zápis vbBarva, v tomto prípade vbBlack:

Sub format_sloupec()
    Columns(1).Interior.Color = vbBlack 'RGB(0, 0, 0)
End Sub

Zadanie: Zmeňte farbu pozadia celého stĺpca určeného aktívny bunkou. Nebudeme pracovať so stĺpcom 1, ale so stĺpcom v ktorom je aktívna bunka. Ako už vieme, ActiveCell.Column vracia číslo stĺpca aktívnej bunky:

Sub format_sloupec_aktivni()
    Columns(ActiveCell.Column).Interior.Color = vbBlack 'RGB(0, 0, 0)
End Sub

V budúcej lekcii, , sa spoločne pozrieme na objekt Range, pomocou ktorého určujeme oblasť buniek.


 

Predchádzajúci článok
Klasické Hello a úvod do OOP pre makrá
Všetky články v sekcii
Makrá v Microsoft Office
Článok pre vás napísala Lenka
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autorka je absolventkou FI MU. Má dlouholetou pedagogickou praxi. Vyučovala maturitní obor IT, zejména Programování a Databázové systémy. Taktéž byla vývojová odborná redaktorka matematiky. Nyní se věnuje nestandardní i standardní výuce na soukromo.
Aktivity