Maturitní otázka č. 8
8. Makra
1. Co jsou to makra a kde se používají
Makro je pojmenovaná sekvence příkazů, akcí nebo stisků kláves, která slouží k automatizaci často se opakujících a rutinních úloh. Namísto toho, aby uživatel prováděl desítky kliknutí manuálně, spustí makro, které celý proces vykoná za zlomek sekundy automaticky.
- Použití: Nejčastěji v kancelářských balících (MS Excel, Word), v grafických programech (Adobe Photoshop - tzv. akce), v textových editorech pro programátory (Notepad++, Vim) nebo dokonce na hardwarové úrovni jako makro klávesy na herních klávesnicích a myších.
2. Rozdíl mezi makrem s parametry a bez parametrů
- Bez parametrů: Je statické. Pokaždé, když je spuštěno, udělá naprosto stejnou věc na stejném místě. Například makro, které nahradí slovo "leden" za "únor" a nastaví písmo na červenou barvu. Nelze ovlivnit jeho chování zvenčí bez úpravy kódu.
- S parametry: Je dynamické. Při jeho spuštění se mu předají vstupní proměnné (argumenty), podle kterých se zachová. Například makro pro tisk, kterému jako parametr předáme počet kopií a název tiskárny. V kódu se parametry definují v závorce za názvem makra (např. Sub Vytiskni(pocet As Integer)).
3. Jazyk pro makra v MS Office
V prostředí Microsoft Office se makra tvoří a upravují v jazyce VBA (Visual Basic for Applications). Lze je buď napsat ručně od nuly, nebo použít "Záznamník maker", který sleduje klikání uživatele a kód ve VBA vygeneruje sám na pozadí.
- Výhody VBA: Je přímo nativně integrován do celého balíku Office. Nabízí přímý přístup k obrovskému objektovému modelu Office (umí snadno manipulovat s objekty jako jsou Buňky, Sešity, Odstavce, Grafy). Je to událostně řízený jazyk (kód se může spustit automaticky např. při otevření sešitu nebo při změně hodnoty konkrétní buňky).
4. Příklad makra v Excelu (Obarvení čísel a textu)
Zadání: Po stisku Ctrl+Q označit záporná čísla žlutě a slovo "ahoj" červeně. Níže je ukázka zdrojového kódu VBA, který toto řeší v rámci vymezeného limitu buněk:
Sub ObarviData()
' Tato procedura by byla v možnostech maker přiřazena zkratce Ctrl+Q
Dim Radek As Long, Sloupec As Integer
Dim Bunka As Range
' Optimalizace rychlosti: vypnutí překreslování obrazovky během běhu makra
Application.ScreenUpdating = False
' Projití maximálního požadovaného rozsahu (65536 řádků, 256 sloupců)
' Upozornění: Procházet buňku po buňce v takovém rozsahu je výpočetně náročné,
' v praxi by se využilo objektu UsedRange. Pro splnění zadání cyklem:
For Radek = 1 To 65536
For Sloupec = 1 To 256
Set Bunka = ActiveSheet.Cells(Radek, Sloupec)
' Kontrola záporného čísla
If IsNumeric(Bunka.Value) And Bunka.Value < 0 Then
Bunka.Interior.Color = vbYellow
' Kontrola slova "ahoj" (přesný text)
ElseIf LCase(Bunka.Value) = "ahoj" Then
Bunka.Interior.Color = vbRed
End If
Next Sloupec
Next Radek
Application.ScreenUpdating = True
End Sub
5. Rizika maker a výchozí nastavení
Makra v MS Office mají obrovskou moc. VBA kód dokáže interagovat se samotným operačním systémem Windows – umí otevírat, mazat nebo přepisovat soubory na pevném disku, umí přistupovat k registrům a dokonce umí stahovat soubory z internetu.
- Makroviry a Malware: Právě kvůli této moci se makra historicky stala jedním z nejčastějších způsobů šíření virů (např. nechvalně známý vir Melissa). Útočník pošle e-mailem infikovaný Excelový soubor. Pokud by se makro spustilo samo, okamžitě by zašifrovalo počítač (Ransomware) nebo stáhlo vir.
Z tohoto důvodu Microsoft ve výchozím nastavení všechna makra blokuje. Pokud otevřete soubor s makrem, objeví se nahoře žlutý pruh upozorňující na bezpečnostní riziko, a uživatel musí explicitně kliknout na "Povolit obsah", čímž dává vědomý souhlas ke spuštění kódu.