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)
.
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.