Keď sa naučíte používať Excel VBA, strávite veľa času prácou v oknách kódu. Makrá, ktoré zaznamenáte, sú uložené v module a kód Excel VBA môžete zadať priamo v module VBA.
Minimalizácia a maximalizácia okien kódu VBA
Ak máte otvorených niekoľko projektov, VBE môže mať v danom čase veľa okien kódu.
Preťaženie okna kódu nie je pekný pohľad.
Kódové okná sú podobné oknám zošitov v Exceli. Môžete ich minimalizovať, maximalizovať, meniť ich veľkosť, skryť, preusporiadať atď. Pre väčšinu ľudí je oveľa jednoduchšie maximalizovať okno Kód, na ktorom pracujú. Umožní vám to zobraziť viac kódu a nebude vás rozptyľovať.
Ak chcete maximalizovať okno Kód, kliknite na tlačidlo Maximalizovať v jeho záhlaví (hneď vedľa X). Alebo jednoducho dvakrát kliknite na jeho záhlavie, aby ste ho maximalizovali. Ak chcete obnoviť pôvodnú veľkosť okna Kód, kliknite na tlačidlo Obnoviť. Keď je okno maximalizované, jeho titulok nie je viditeľný, takže tlačidlo Obnoviť nájdete pod titulkom VBE.
Niekedy možno budete chcieť zobraziť dve alebo viac okien kódu. Môžete napríklad porovnať kód v dvoch moduloch alebo skopírovať kód z jedného modulu do druhého. Okná môžete usporiadať manuálne alebo výberom položky Okno → Dlaždice vodorovne alebo Okno → Dlaždice vertikálne ich usporiadať automaticky.
Medzi oknami kódu môžete rýchlo prepínať stlačením Ctrl+F6. Ak túto kombináciu kláves zopakujete, budete neustále prechádzať všetkými otvorenými oknami kódu. Stláčaním Ctrl+Shift+F6 sa cyklicky prechádza oknami v opačnom poradí. (Viac informácií nájdete v týchto klávesových skratkách Excel VBA .)
Minimalizácia okna s kódom ho odstráni z cesty. Okno môžete zatvoriť aj kliknutím na tlačidlo Zavrieť (ktoré zobrazuje X) v záhlaví okna Kód. (Zatvorením okna ho iba skryjete; o nič neprídete.) Ak ho chcete znova otvoriť, stačí dvakrát kliknúť na príslušný objekt v okne Projekt. Mimochodom, práca s týmito oknami Code znie ťažšie, než v skutočnosti je.
Vytvorenie modulu VBA
Vo všeobecnosti môže modul Excel VBA obsahovať tri typy kódu:
- Vyhlásenia: Jedno alebo viac informačných vyhlásení, ktoré poskytnete VBA. Môžete napríklad deklarovať typ údajov pre premenné, ktoré plánujete použiť, alebo nastaviť niektoré ďalšie možnosti pre celý modul. Vyhlásenia sú v podstate vyhlásenia o chode domácnosti. V skutočnosti nie sú popravení.
- Podprocedúry: Sada programovacích inštrukcií, ktoré po spustení vykonajú nejakú akciu.
- Procedúry funkcií: Sada programovacích inštrukcií, ktoré vracajú jednu hodnotu (v koncepcii podobná funkcii pracovného hárka, napríklad SUM).
Jeden modul VBA môže uložiť ľubovoľný počet procedúr Sub, procedúr funkcií a deklarácií. No, tam je limit - asi 64.000 znakov na module. Je nepravdepodobné, že sa čo i len priblížite k hranici 64 000 znakov. Ale ak áno, riešenie je jednoduché: Stačí vložiť nový modul.
Ako si usporiadate modul VBA, je úplne na vás. Niektorí ľudia uprednostňujú ponechať celý svoj kód VBA pre aplikáciu v jedinom module VBA; iní radi rozdelia kód do niekoľkých modulov. Je to osobná voľba, rovnako ako usporiadanie nábytku.
Získanie kódu VBA do modulu
Prázdny modul VBA je ako falošné jedlo, ktoré vidíte vo výkladoch niektorých čínskych reštaurácií; vyzerá to dobre, ale v skutočnosti vám to veľa nerobí. Predtým, ako budete môcť robiť čokoľvek zmysluplné, musíte mať v module VBA nejaký kód VBA. Kód VBA môžete získať do modulu VBA tromi spôsobmi:
- Zadajte kód priamo.
- Použite záznamník makier Excel na zaznamenanie vašich akcií a ich konverziu na kód VBA.
- Skopírujte kód z jedného modulu a vložte ho do iného.
Priame zadanie kódu Excel VBA
Niekedy je najlepšia cesta tá najpriamejšia. Priame zadanie kódu zahŕňa ... no, priame zadanie kódu. Inými slovami, kód napíšete pomocou klávesnice. Zadávanie a úprava textu v module VBA funguje tak, ako by ste mohli očakávať. Text môžete vybrať, skopírovať, vystrihnúť, prilepiť a urobiť s ním ďalšie veci.
Pomocou klávesu Tab môžete odsadiť niektoré riadky, aby sa váš kód ľahšie čítal. Odsadzovanie nie je nutné, ale je dobrým zvykom si ho osvojiť. Keď budete študovať kódovanie Excel VBA, pochopíte, prečo je užitočné odsadenie riadkov kódu.
Jeden riadok kódu VBA môže byť taký dlhý, ako potrebujete. Možno však budete chcieť použiť znaky na pokračovanie riadkov na rozdelenie dlhých riadkov kódu. Ak chcete pokračovať v jednom riadku kódu (známy aj ako príkaz) z jedného riadku na ďalší, ukončite prvý riadok medzerou, za ktorou nasleduje podčiarkovník (_). Potom pokračujte vo vyhlásení na ďalšom riadku. A nezabudnite na priestor. Znak podčiarknutia, pred ktorým nie je medzera, túto úlohu nesplní.
Tu je príklad jedného príkazu rozdeleného do troch riadkov:
Selection.Sort Key1:=Range("A1"), _
Poradie1:=xlVzostupne, Hlavička:=xlHádaj, _
Orientácia:=xlTopToBottom
Tento príkaz by fungoval presne rovnako, ak by bol zadaný v jednom riadku (bez znakov na pokračovanie riadku). Všimnite si, že druhý a tretí riadok tohto vyhlásenia sú odsadené. Odsadenie je voliteľné, ale pomáha objasniť skutočnosť, že tieto riadky nie sú samostatné príkazy.
Inžinieri v bielom plášti, ktorí navrhli VBE, počítali s tým, že ľudia budú robiť chyby. Preto má VBE viacero úrovní vrátenia a zopakovania. Ak ste odstránili výpis, ktorý ste nemali mať, kliknite na tlačidlo Späť na paneli nástrojov (alebo stlačte Ctrl+Z), kým sa príkaz znova nezobrazí. Po vrátení späť môžete kliknúť na tlačidlo Znova a vykonať zmeny, ktoré ste vrátili.
Ste pripravení zadať skutočný kód? Skúste nasledujúce kroky:
Vytvorte nový zošit v Exceli.
Stlačením Alt+F11 aktivujte VBE.
Kliknite na názov nového zošita v okne Projekt.
Zvoľte Vložiť → Modul na vloženie modulu VBA do projektu.
Do modulu zadajte nasledujúci kód:
Sub GuessName()
Msg = "Je vaše meno " & Application.UserName & "?"
Ans = MsgBox(Msg, vbYesNo)
If Ans = vbNo Then MsgBox "Oh, nevadí."
If Ans = vbYes Then MsgBox "Musím byť psychická!"
End Sub
Umiestnite kurzor kdekoľvek v texte, ktorý ste napísali, a stlačením klávesu F5 vykonajte postup.
F5 je skratka pre Run → Run Sub/UserForm. Ak ste kód zadali správne, Excel vykoná procedúru a vy môžete reagovať na jednoduché dialógové okno. Text v dialógovom okne sa bude líšiť od textu zobrazeného tu.
Procedúra GuessName zobrazí toto dialógové okno.
Keď zadáte kód uvedený v kroku 5, môžete si všimnúť, že VBE vykonáva určité úpravy zadávaného textu. Napríklad po zadaní príkazu Sub VBE automaticky vloží príkaz End Sub. A ak vynecháte medzeru pred alebo za znakom rovnosti, VBE vloží medzeru za vás. VBE tiež zmení farbu a kapitalizáciu niektorých textov. Toto všetko je úplne normálne. Je to len spôsob VBE, ako udržať veci čisté a čitateľné.
Ak ste postupovali podľa predchádzajúcich krokov, práve ste napísali procedúru VBA Sub, tiež známu ako makro. Keď stlačíte F5, Excel spustí kód a bude postupovať podľa pokynov. Inými slovami, Excel vyhodnotí každý výrok a urobí to, čo ste mu povedali. (Nedovoľte, aby vám táto novonájdená sila stúpla do hlavy.) Toto makro môžete spustiť ľubovoľne veľakrát – hoci po niekoľkých desiatkach má tendenciu stratiť svoju príťažlivosť.
Pre záznam, toto jednoduché Excelové makro používa nasledujúce koncepty:
- Definovanie procedúry Sub (prvý riadok)
- Priradenie hodnôt premenným (Msg a Ans)
- Reťazenie (spájanie) reťazca (pomocou operátora &)
- Používanie vstavanej funkcie VBA (MsgBox)
- Používanie vstavaných konštánt VBA (vbYesNo, vbNo a vbYes)
- Použitie konštrukcie If-Then (dvakrát)
- Ukončenie procedúry Sub (posledný riadok)
Použitie záznamníka makier Excel VBA
Ďalším spôsobom, ako môžete získať kód do modulu VBA, je zaznamenávanie vašich akcií pomocou záznamníka makier Excel.
Mimochodom, neexistuje absolútne žiadny spôsob, ako môžete zaznamenať postup GuessName zobrazený vyššie. Môžete zaznamenávať iba veci, ktoré môžete robiť priamo v Exceli. Zobrazenie okna správ nie je v bežnom repertoári Excelu. (Je to vec VBA.) Makrorekordér je užitočný, ale v mnohých prípadoch budete pravdepodobne musieť zadať aspoň nejaký kód ručne.
Tu je podrobný príklad, ktorý ukazuje, ako zaznamenať makro, ktoré vloží nový pracovný hárok a skryje všetky riadky okrem prvých desiatich a všetky stĺpce okrem prvých desiatich. Ak chcete vyskúšať tento príklad, začnite s novým, prázdnym excelovým zošitom a postupujte podľa týchto krokov:
Aktivujte pracovný hárok v zošite.
Postačí akýkoľvek pracovný hárok programu Excel.
Kliknite na kartu Vývojár a uistite sa, že nie je zvýraznená možnosť Použiť relatívne odkazy .
Toto makro sa zaznamenáva pomocou absolútnych referencií.
Vyberte Vývojár → Kód → Nahrať makro alebo kliknite na ikonu vedľa indikátora Pripravené na ľavom konci stavového riadka.
Excel zobrazí dialógové okno Záznam makra.
V dialógovom okne Zaznamenať makro pomenujte makro TenByTen, zadajte, že chcete makro uložiť do tohto zošita, a stlačte Shift+T pre klávesovú skratku.
Makro je možné spustiť stlačením Ctrl+Shift+T.
Kliknutím na tlačidlo OK spustíte nahrávanie. Excel automaticky vloží do projektu nový modul VBA, ktorý zodpovedá aktívnemu zošitu.
Od tohto bodu Excel konvertuje vaše akcie na kód VBA. Počas nahrávania sa ikona v stavovom riadku zmení na malý štvorec. Toto je pripomienka, že záznam makier je spustený. Môžete tiež kliknúť na túto ikonu a zastaviť záznam makier.
Kliknite na ikonu Nový hárok napravo od poslednej karty hárka.
Excel vloží nový pracovný hárok.
Vyberte celý stĺpec K (11. stĺpec) a stlačte Ctrl+Shift+šípka doprava; potom kliknite pravým tlačidlom myši na ľubovoľný stĺpec a v kontextovej ponuke vyberte príkaz Skryť.
Excel skryje všetky vybraté stĺpce.
Vyberte celý riadok 11 a stlačte Ctrl+Shift+šípka nadol; potom kliknite pravým tlačidlom myši na ľubovoľný vybratý riadok a v kontextovej ponuke vyberte príkaz Skryť.
Excel skryje všetky vybraté stĺpce.
Vyberte bunku A1.
Vyberte Vývojár → Kód → Zastaviť nahrávanie alebo kliknite na tlačidlo Zastaviť nahrávanie v stavovom riadku (malý štvorec). Excel prestane zaznamenávať vaše akcie.
Ak chcete zobraziť toto novo zaznamenané makro, stlačte Alt+F11, čím aktivujete VBE. Nájdite názov zošita v okne Projekt. Vidíte, že projekt má uvedený nový modul. Názov modulu závisí od toho, či ste pri spustení zaznamenávania makra mali v zošite nejaké ďalšie moduly. Ak nie, modul sa volá Module1. Dvojitým kliknutím na modul zobrazíte okno Kód pre modul.
Tu je kód vygenerovaný vašimi akciami:
Sub TenByTen()
'
Makro TenByTen
'
' Klávesová skratka: Ctrl+Shift+T
'
Sheets.Add After:=Aktívny hárok
Columns("K:K").Vyberte
Rozsah(Výber, Výber.Koniec(xlDoprava)).Vybrať
Selection.EntireColumn.Hidden = Pravda
Riadky("11:11").Vyberte
Rozsah(Výber, Výber.Koniec(xlDole)).Vybrať
Selection.EntireRow.Hidden = Pravda
Rozsah("A1").Vyberte
End Sub
To try this macro, activate any worksheet and press the shortcut key that you assigned in Step 4: Ctrl+Shift+T.
If you didn’t assign a shortcut key to the macro, don’t worry. Here’s how to display a list of all macros available and run the one you want:
Choose Developer → Code → Macros. Keyboard fans can press Alt+F8.
Either of these methods displays a dialog box that lists all the available macros.
Select the macro in the list (in this case, TenByTen).
Click the Run button.
Excel executes the macro, and you get a new worksheet with ten visible rows and ten visible columns.
You can execute any number of commands and perform any number of actions while the macro recorder is running. Excel dutifully translates your mouse actions and keystrokes to VBA code.
And, of course, you can also edit the macro after you record it. To test your new skills, try editing the macro so that it inserts a worksheet with nine visible rows and columns — perfect for a Sudoku puzzle.
Copying VBA code
The final method for getting code into a VBA module is to copy it from another module or from some other place (such as a website). For example, a Sub or Function procedure that you write for one project might also be useful in another project. Instead of wasting time reentering the code, you can activate the module and use the normal Clipboard copy-and-paste procedures. (You’re probably rather fond of the keyboard shortcuts Ctrl+C to copy and Ctrl+V to paste.) After pasting the code into a VBA module, you can modify the code if necessary.
Mimochodom, na webe nájdete množstvo príkladov kódu VBA. Ak ich chcete vyskúšať, vyberte kód vo svojom prehliadači a stlačením klávesov Ctrl+C ho skopírujte. Potom aktivujte modul a stlačením Ctrl+V ho prilepte.
Keď kopírujete kód z webovej stránky, niekedy to vyžaduje určitú opravu. Znaky úvodzoviek môžu byť napríklad „inteligentné úvodzovky“ a musia sa previesť na jednoduché úvodzovky. A niekedy sa namotajú dlhé rady. Vo VBE sa dajú ľahko zistiť chybné vyhlásenia, pretože sa zobrazujú červenou farbou.