Lekce 3 - Makrá pre prácu s konkrétnou bunkou, riadkom či stĺpcom
Minulá lekcie, , 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).

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.

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.


