Predstavte si situáciu, že v jednom zošite (av_zdroj.xls) máte zoznam výrobkov na sklade, ku ktorým pridávate po predaji cenu. Takýto záznam chcete potom premiestniť do druhého zošita (av_ciel.xls), aby Vám v skladovej tabuľke už neprekážal, keď ste už tovar predali. Ja mám v tabuľkách pre prehľadnosť len dva stĺpce A -> Auto a B -> Cena. Do stĺpca B sa po predaji tovaru vpíše jeho cena a na konci pracovného dňa sa budú tieto riadky všetky naraz premiestňovať do druhého zošita.
Makro môžete vytvoriť cez Záznam makra v ponuke Nástroje > Makro. V zobrazenom okne zadajte názov a kliknutím na OK spustíte záznam. Celý postup funguje tak, ako keby ste Vaše úkony nahrávali na video. Jednoducho všetko čo chcete aby makro robilo, počas záznamu urobíte ručne. Pozor, zaznamenajú sa aj chybné úkony, ktoré urobíte.
Malý problém je v tom, že ak nebudete používať pri zázname makra relatívne odkazy tak všetky úkony sa budú vždy robiť len v tých bunkách ako pri zázname. Relatívny odkaz pri zázname zapínate cez zobrazený panel nástrojov „Záznam makra“. Najlepšie tento úkon uvidíte na zápise údajov do nového zošita, pretože vždy ich tam bude viac a nedokážete určiť absolútnym odkazom v kóde VBA kam sa majú zapísať nové údaje (nebudete predsa denne upravovať kód VBA). Preto je vhodné použiť relatívny odkaz a klávesovú skratku Ctrl + šípka dolu + 1x šípka dolu, ktorá Vás presunie za posledný záznam bez ohľadu na to, koľko ich tam už je. Tým určíte kam bude makro zapisovať nové údaje. Tiež je potrebné používať automatický filter, pretože výrobky, ktoré postupne predávate zákazníkom nie sú vždy v susedných riadkoch.
Po všetkých úkonoch, ktoré ste chceli zaznamenať je potrebné záznam zastaviť. Ak by ste sa potom cez klávesovú skratku Alt + F11 pozreli do kódu VBA, tak by ste videli niečo podobné tomuto:
Sub kopiruj()
'
' kopiruj Makro
' Makro zaznamenané 23.5.2006, Peter Belko
'
Range("A1").Select
Selection.AutoFilter Field:=2, Criteria1:="<>"
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("av_ciel.xls").Activate
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Windows("av_zdroj.xls").Activate
Application.CutCopyMode = False
Selection.EntireRow.Delete
Selection.AutoFilter Field:=2
Range("A1").Select
End Sub
Je to kód VBA, ktorý sa vytváral počas záznamu. Programátori ho môžu dodatočne upravovať podľa potreby a to je tiež jedna z celkom dobrých funkcií Excelu.
Ak by ste si chceli toto makro vyskúšať, vytvorte si dva xls súbory a do každého vytvorte dva názvy stĺpcov. Potom v zdroji zapnite automatický filter a vpíšte cvičné údaje (výrobok, ceny). V editore jazyka VBA v zdrojovom súbore (Alt + F11) potom vložte Modul cez Insert > Module. Do okna modulu skopírujte vyššie uvedený kód – týmto obídete nutnosť zaznamenávať makro. Všetko uložte a vyskúšajte makro „kopiruj“ spustiť (Nástroje > Makro > Makrá). Malo by Vám preniesť filtrované záznamy s cenou do druhého zošita.
Môj kód ma malý problém v tom, že ak v cieľovom zošite nebudete mať ručne vpísaný prvý záznam, tak to nebude správne fungovať. Preto je potrebné do súboru av_ciel.xls prvý záznam predaného tovaru vložiť ručne. Od druhého už bude fungovať makro. Nemal som čas zaoberať sa vyriešením tohto nedostatku a myslím, že to nie je veľká prekážka.
Netvrdím, že toto je jediné riešenie tohto problému a programátori by možno urobili niečo jednoduchšie a prehľadnejšie, ale pre bežných používateľov je to dobrá pomôcka na automatizovanie bežných úkonov.