Lekce 3 - Makra pro práci s konkrétní buňkou, řádkem či sloupcem
Minulá lekce, Klasické Hello a úvod do OOP pro makra, nás seznámila s pojmem objekt, vlastnost objektu
a metoda objektu. V dnešní lekci se podíváme zejména na to, jak říci, že
chceme pracovat s konkrétní buňkou, řádkem či sloupcem (v aktuálním
listu). Vyzkoušíme a vysvětlíme si Offset
, který popisuje
buňku či oblast posunutou vůči jiné buňce či oblasti buněk.
Níže uvedené objekty jsou stejného typu, lze tedy předpokládat, že mají k dispozici stejné vlastnosti a metody.
Objekt ActiveCell - aktivní buňka
Zadání: Zapište do aktivní buňky hodnotu 100
.
U ActiveCell
budeme měnit hodnotu
Value
, tedy ji přiřadíme pomocí
=
. Hodnotu lze vnímat jako číslo
100
, nebo jako řetězec
"100"
. V tomto případě je to jedno, tedy se nabízí
dvě správná řešení.
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
Zadání: V dialogovém okně zobrazte adresu aktivní buňky.
Vlastnost Address
obsahuje absolutní adresu
buňky, vlastnost Row
obsahuje číslo
řádku a vlastnost Column
obsahuje číslo
sloupce. Jelikož je před vlastnostmi objekt ActiveCell
,
vztahují se k němu:
Sub adresa_aktivni() MsgBox "Absolutní adresa je " & ActiveCell.Address MsgBox "Řádek: " & ActiveCell.Row & " Sloupec: " & ActiveCell.Column End Sub
Zadání: Zapište do aktivní buňky své křestní jméno a do následující (předchozí) buňky své příjmení.
Zápis křestního jména provedeme příkazem
ActiveCell.Value = "Jméno"
, pro zápis příjmení se musíme
dostat do následující (předchozí) buňky.
Protože se chceme v listu posunout o určitý počet buněk od aktivní
buňky, použijeme
Offset(RowOffset, ColumnOffset)
.
Offset
má dva parametry, jejichž hodnota musí být celé
číslo. První parametr určuje o kolik řádků a kam je posunuta
cílová buňka (0
neposunuje se, kladné číslo směrem
dolů, záporné číslo směrem nahoru). Druhý parametr určuje o
kolik sloupců a kam je posunuta cílová buňka (0
neposunuje se, kladné číslo směrem vpravo, záporné číslo směrem
vlevo).
Tedy od aktivní buňky ActiveCell
se posuňme
do následující buňky Offset(0, 1)
a tam nás
zajímá vlastnost Value
. Použijeme tečkovou
notaci. Protože chceme hodnotu měnit, přiřadíme pomocí
=
novou hodnotu, v tomto případě
"Příjmení"
.
Sub jmeno_prijmeni_aktivni() ActiveCell.Value = "Jméno" ActiveCell.Offset(0, 1).Value = "Příjmení" End Sub
Při zápisu do předchozí buňky místo
Offset(0, 1)
bude
Offset(0, -1)
a zbytek kódu zůstává. Pokud
bychom chtěli příjmení napsat do buňky pod, použijeme
Offset(1, 0)
, do buňky nad
Offset(-1, 0)
.
Objekt Cells - buňka
Pro určení jedné konkrétní buňky lze použít
Cells(Row, Column)
. První parametr určuje
číslo řádku buňky a druhý číslo sloupce. Tedy například buňka
A2 je Cells(2, 1)
, buňka
B5 je Cells(5, 2)
, buňka
C1 je Cells(1, 3)
.
Zadání: Naprogramujte všechna zadání, která jste řešili pro aktivní buňku, tentokrát pro buňku B5.
Řešení je opět velmi jednoduché. Původně jsme pracovali s aktivní
buňkou ActiveCell
, teď chceme pracovat s buňkou
B5 Cells(5, 2)
. ActiveCell
nahradíme Cells(5, 2)
a zbytek zůstane stejný.
Správně se dalo předpokládat, že vlastnosti a metody pro buňku, ať už je to buňka aktivní nebo buňka s konkrétní adresou, budou stejné. Zrovna tak i u oblastí se dá s těmito vlastnostmi a metodami počítat.
Objekt Rows – řádek
Tento objekt lze využít pro určení jednoho řádku. Číslo řádku uvádíme v parametru.
Zadání: Změňte barvu pozadí celého prvního řádku.
Budeme pracovat s prvním řádkem, tedy
Rows(1)
. Zajímá nás výplň
Interior
a barva, což je vlastnost
Color
. Základní barvy lze zapsat přes
vbBarva
, jak je uvedeno v komentáři. Krom bílé
vbWhite
jsou to základní barvy v tiskárně s barevným modelem
CMYK (vbMagenta
, vbCyan
, vbYellow
,
vbBlack
) a základní barvy monitoru s barevným modelem RGB
(vbRed
, vbGreen
, vbBlue
).
Já mám raději zápis využívající přímo barevný model RGB, kde se
barva skládá ze tří složek. První určuje množství červené (Red),
druhá zelené (Green) a třetí modré (Blue). Hodnota je celé číslo od
0
do 255
včetně.
Sub format_radek() Rows(1).Interior.Color = RGB(0, 0, 0) 'to samé jako vbBlack End Sub
Pro změnu barvy lze použít taktéž vlastnost
ColorIndex
. Hodnotu
xlNone
použijeme, pokud chceme mít buňku
bez výplně, celočíselnou hodnotu, pokud chceme buňku
podbarvit. Ukážeme si to v následujícím příkladu.
Zadání: Změňte barvu pozadí pátého řádku, až na buňku bez výplně ve druhém, třetím a šestém sloupci.
Budeme pracovat s pátým řádkem Rows(5)
a
jeho výplní Interior
. Pro vybarvení použijeme
vlastnost ColorIndex
. První řádek kódu změní
pozadí celého řádku a další pak zruší výplň ve druhém, třetím a
šestém sloupci.
Při rušení výplně chceme pracovat s konkrétní buňkou, tedy použijeme
vlastnost (a zároveň objekt) Cells
. Objekt
Rows(5)
říká, že budeme pracovat s pátým
řádkem. Za tečkou je pak buňka vztažena k tomuto pátému
řádku. Proto píšeme Cells(1, 2)
, což
znamená v prvním řádku vůči nadřazené oblasti a druhém sloupci, tedy v
buňce B5. Pokud není uveden nadřazený objekt, je pravda, že buňka B5 je
Cells(5, 2)
, jak je uvedeno v předchozí části textu. Ale pozor,
při uvedení nadřazeného objektu se vše vztahuje právě k
němu.
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 - sloupec
Tento objekt lze využít pro určení jednoho sloupce. Číslo sloupce uvádíme v parametru.
Zadání: Změňte barvu pozadí celého prvního sloupce.
Řešení bylo vysvětleno výše. Jen protože pracujeme s prvním sloupcem,
uvádíme Columns(1)
a je použit zápis vbBarva
, v
tomto případě vbBlack
:
Sub format_sloupec() Columns(1).Interior.Color = vbBlack 'RGB(0, 0, 0) End Sub
Zadání: Změňte barvu pozadí celého sloupce určeného aktivní
buňkou. Nebudeme pracovat se sloupcem 1
, ale se sloupcem v němž
je aktivní buňka. Jak už víme,
ActiveCell.Column
vrací číslo sloupce aktivní
buňky:
Sub format_sloupec_aktivni() Columns(ActiveCell.Column).Interior.Color = vbBlack 'RGB(0, 0, 0) End Sub
V příští lekci, , se společně podíváme na objekt Range, pomocí něhož určujeme oblast buněk.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkamiStaženo 603x (20.36 kB)