Poput ljudi, kućnih ljubimaca i uragana, svaki Excel VBA postupak i funkcija mora imati naziv. Iako je sasvim prihvatljivo nazvati svog psa Hairball Harris, obično nije dobra ideja koristiti takav slobodni stav kada imenujete Excl VBA procedure. Prilikom imenovanja Excel VBA procedura morate slijediti nekoliko pravila:
- Možete koristiti slova, brojeve i neke interpunkcijske znakove, ali prvi znak mora biti slovo.
- U nazivu ne možete koristiti razmake ili točke.
- VBA ne razlikuje velika i mala slova.
- Ne možete koristiti nijedan od sljedećih znakova u nazivu procedure: #, $, %, &, @, ^, * ili !. Drugim riječima, naziv vaše procedure ne može izgledati kao psovke u stripu.
- Ako napišete funkciju funkcije za korištenje u formuli, izbjegavajte korištenje imena koje izgleda kao adresa ćelije (na primjer, A1 ili B52). Zapravo, Excel dopušta takve nazive funkcija, ali zašto bi stvari bile zbunjujuće nego što jesu?
- Nazivi postupaka ne mogu biti duži od 255 znakova. (Naravno, nikada ne biste napravili ovoliko dugo ime procedure.)
U idealnom slučaju, naziv procedure opisuje svrhu rutine. Dobra praksa je stvoriti naziv kombiniranjem glagola i imenice — na primjer, ProcessData, PrintReport, Sort_Array ili CheckFilename.
Neki programeri radije koriste imena nalik rečenicama koja pružaju potpuni opis postupka. Neki primjeri uključuju WriteReportToTextFile i Get_Print_Options_and_Print_Report. Upotreba tako dugih imena ima prednosti i nedostatke. S jedne strane, takvi su nazivi opisni i obično nedvosmisleni. S druge strane, za tipkanje im je potrebno dulje. Svatko razvija stil imenovanja, ali ako vaša makronaredba nije samo brza i prljava privremena makronaredba, dobra je ideja biti deskriptivna i izbjegavati besmislena imena kao što su DoIt, Update, Fix i uvijek popularni Macro1.
Izvršavanje Excel VBA potprocedura
Iako možda ne znate puno o razvoju podprocedura u ovom trenutku, važno je znati kako izvršiti te procedure. Sub procedura je bezvrijedna osim ako ne znate kako je izvršiti.
Usput, izvršavanje Sub procedure znači isto što i pokretanje ili pozivanje Sub procedure. Možete koristiti terminologiju koju želite.
VBA Sub možete izvršiti na mnogo načina; to je jedan od razloga zašto možete učiniti toliko korisnih stvari s Sub procedurama. Evo iscrpnog popisa načina za izvođenje podprocedure:
- Odaberite Run → Run Sub/UserForm (u VBE). Excel izvršava Sub proceduru u kojoj se nalazi pokazivač. Ova naredba izbornika ima dvije alternative: tipku F5 i gumb Run Sub/UserForm na standardnoj alatnoj traci u VBE-u. Ove metode ne rade ako procedura zahtijeva jedan ili više argumenata.
- Koristite Excelov dijaloški okvir Makro. Ovaj okvir otvarate odabirom Programer → Kod → Makronaredbe ili odabirom Pogled → Makronaredbe → Makronaredbe. Ili zaobiđite traku i samo pritisnite Alt+F8. Kada se pojavi dijaloški okvir Makro, odaberite željenu podproceduru i kliknite Pokreni. Ovaj dijaloški okvir navodi samo procedure koje ne zahtijevaju argument.
- Pritisnite Ctrl+tipka (ili Ctrl+Shift+tipka) koja je dodijeljena podproceduri (pod pretpostavkom da ste je dodijelili).
- Kliknite gumb ili oblik na radnom listu. Gumb ili oblik mora imati dodijeljenu podproceduru — što je vrlo jednostavno za napraviti.
- Iz druge podprocedure koju napišete.
- Kliknite gumb koji ste dodali na alatnu traku za brzi pristup.
- Iz prilagođene stavke koju ste dodali na vrpcu.
- Kada se dogodi neki događaj. Ti događaji uključuju otvaranje radne knjige, zatvaranje radne knjige, spremanje radne knjige, promjenu ćelije, aktiviranje lista i druge stvari.
- Iz prozora Immediate u VBE. Samo upišite naziv podprocedure i pritisnite Enter.
Neke od ovih tehnika obrađene su u nastavku. Da biste slijedili dalje, morate unijeti Sub proceduru u VBA modul:
Počnite s novom radnom bilježnicom.
Pritisnite Alt+F11 da aktivirate VBE.
Odaberite radnu knjigu u prozoru Projekt.
Odaberite Umetanje → Modul za umetanje novog modula.
Unesite sljedeće u modul:
Sub ShowCubeRoot()
Num = InputBox("Unesite pozitivan broj")
MsgBox Num ^ (1/3) & " je kockasti korijen."
Kraj Sub
Ovaj postupak od korisnika traži broj, a zatim prikazuje kockasti korijen tog broja u okviru za poruke. Ove slike pokazuju što se događa kada izvršite ovaj postupak.
Korištenje ugrađene funkcije VBA InputBox za dobivanje broja.
Vi također što se događa putem MsgBox funkcije ovdje.
Prikaz kubnog korijena broja putem funkcije MsgBox.
Inače, ShowCubeRoot nije primjer dobre makronaredbe. Ne provjerava greške, tako da lako kvari. Pokušajte kliknuti gumb Odustani u okviru za unos ili unijeti negativan broj. Svaka radnja rezultira porukom o pogrešci.
Izravno izvršavanje Excel VBA Sub procedure
Jedan od načina da izvršite ovu proceduru je da to učinite izravno iz VBA modula u kojem ste ga definirali. Prati ove korake:
Aktivirajte VBE i odaberite VBA modul koji sadrži proceduru.
Pomaknite kursor bilo gdje u kodu procedure.
Pritisnite F5 (ili odaberite Run → Run Sub/UserForm).
Odgovorite na okvir za unos i kliknite U redu.
Postupak prikazuje kubni korijen broja koji ste unijeli.
Ne možete koristiti Run → Run Sub/UserForm za izvođenje podprocedure koja koristi argumente, jer nemate načina da proslijedite argumente proceduri. Ako procedura sadrži jedan ili više argumenata, jedini način da se izvrši je da je pozovete iz druge procedure - koja mora dati argument(e).
Izvođenje postupka iz dijaloškog okvira Macro programa Excel
Većinu vremena izvršavate Sub procedure iz Excela, a ne iz VBE-a. Sljedeći koraci opisuju kako izvršiti makronaredbu pomoću dijaloškog okvira Macro programa Excel:
Ako radite u VBE-u, aktivirajte Excel.
Pritiskom na Alt+F11 brza je ruta.
Odaberite Developer → Code → Macros (ili pritisnite Alt+F8).
Excel prikazuje dijaloški okvir prikazan ovdje.
Dijaloški okvir Makro prikazuje sve dostupne potprocedure.
Odaberite makronaredbu.
Kliknite Pokreni (ili dvaput kliknite naziv makronaredbe u okviru s popisom).
Dijaloški okvir Makro ne prikazuje potprocedure koje koriste argumente. To je zato što ne postoji način da navedete argumente.
Izvršavanje Excel VBA makronaredbe pomoću tipke prečaca
Drugi način za izvršavanje makronaredbe je da pritisnete njegovu tipku prečaca. Ali prije nego što možete koristiti ovu metodu, makronaredbi morate dodijeliti tipku prečaca.
Imate priliku dodijeliti tipku prečaca u dijaloškom okviru Record Macro kada počnete snimati makronaredbu . Ako izradite proceduru bez korištenja makro snimača, možete dodijeliti tipku prečaca (ili promijeniti postojeću tipku prečaca) pomoću sljedećih koraka:
Odaberite Razvojni programer → Kod → Makronaredbe.
Odaberite naziv potprocedure s okvira s popisom.
U ovom primjeru, procedura se zove ShowCubeRoot.
Kliknite gumb Opcije.
Excel prikazuje dijaloški okvir Mogućnosti makronaredbe prikazan ovdje.
Dijaloški okvir Mogućnosti makronaredbe omogućuje vam postavljanje opcija za svoje makronaredbe.
Kliknite opciju Tipka prečaca i unesite slovo u okvir s oznakom Ctrl.
Slovo koje unesete odgovara kombinaciji tipki koju želite koristiti za izvršavanje makronaredbe. Na primjer, ako unesete malo slovo c, makronaredbu možete izvršiti pritiskom na Ctrl+C. Ako unesete veliko slovo, trebate dodati tipku Shift u kombinaciju tipki. Na primjer, ako unesete C, makronaredbu možete izvršiti pritiskom na Ctrl+Shift+C.
Kliknite U redu da zatvorite dijaloški okvir Mogućnosti makronaredbe, a zatim kliknite Odustani da zatvorite dijaloški okvir Makro.
Nakon što ste dodijelili tipku prečaca, možete pritisnuti tu kombinaciju tipki da biste izvršili makronaredbu. Tipka prečaca ne radi ako je dodijeljena makronaredbi koja koristi argument.
Tipke prečaca koje dodijelite makronaredbama nadjačavaju ugrađene tipke prečaca programa Excel. Na primjer, Ctrl+C je standardni prečac za kopiranje podataka. Ako makronaredbi dodijelite Ctrl+C, ne možete koristiti Ctrl+C za kopiranje. To obično nije velika stvar jer Excel gotovo uvijek nudi druge načine za izvršavanje naredbi.
Izvođenje Excel VBA procedure s gumba ili oblika
Ponekad bi vam se mogla svidjeti ideja da makronaredbu dodijelite gumbu (ili bilo kojem drugom obliku) na radnom listu. Da biste gumbu dodijelili makronaredbu programa Excel, slijedite ove korake:
Aktivirajte radni list.
Dodajte gumb iz grupe Kontrole obrasca.
Za prikaz grupe Kontrola obrasca, odaberite Razvojni programer → Kontrole → Umetanje.
Vrpca koja prikazuje kontrole dostupne kada kliknete Umetni na kartici Razvojni programer.
Kliknite alat Button u grupi Kontrole obrasca.
To je prvi gumb u prvom redu kontrola.
Povucite radni list da biste stvorili gumb.
Nakon što dodate gumb na radni list, Excel čita vaše misli i prikazuje dijaloški okvir Dodjela makronaredbe prikazan u nastavku.
Kada dodate gumb na radni list, Excel automatski prikazuje dijaloški okvir Dodjela makronaredbe.
Odaberite makronaredbu koju želite dodijeliti gumbu.
Kliknite OK.
Nakon što izvršite zadatak, klikom na gumb izvršava se makronaredba — baš kao magijom.
Kada dodate gumb, imajte na umu da padajući okvir prikazuje dva skupa kontrola: kontrole obrasca i ActiveX kontrole. Ove dvije skupine kontrola izgledaju slično, ali su zapravo vrlo različite. U praksi su kontrole obrasca jednostavnije za korištenje.
Također možete dodijeliti makronaredbu bilo kojem drugom obliku ili objektu. Na primjer, pretpostavimo da biste željeli izvršiti makronaredbu kada korisnik klikne objekt Rectangle. Prati ove korake:
Dodajte pravokutnik na radni list.
Umetnite pravokutnik odabirom Umetanje → Ilustracije → Oblici.
Desnom tipkom miša kliknite pravokutnik.
Na izborniku prečaca odaberite Dodijeli makronaredbu.
Odaberite makronaredbu u dijaloškom okviru Dodjela makronaredbe.
Kliknite OK.
Nakon što izvršite ove korake, klikom na pravokutnik izvršava se dodijeljena makronaredba.
Izvođenje procedure iz druge Excel VBA procedure
Također možete izvršiti Excel VBA proceduru iz druge procedure. Slijedite ove korake ako želite ovo isprobati:
Aktivirajte VBA modul koji sadrži rutinu ShowCubeRoot.
Unesite ovu novu proceduru (bilo iznad ili ispod ShowCubeRoot koda - nema razlike):
Sub NewSub()
Nazovite ShowCubeRoot
Kraj Sub
Kada završite, jednostavno izvršavate makronaredbu NewSub.
Najlakši način da to učinite je da pomaknete kursor bilo gdje unutar NewSub koda i pritisnete F5. Primijetite da ova NewSub procedura jednostavno izvršava proceduru ShowCubeRoot.
Usput, ključna riječ Poziv nije obavezna. Izjava se može sastojati samo od naziva Sub procedure. Međutim, korištenje ključne riječi Call savršeno jasno daje do znanja da se poziva procedura.
Izvršavanje procedura Excel VBA funkcije
Funkcije, za razliku od podprocedura, mogu se izvršiti na samo dva načina:
- Pozivanjem funkcije iz druge Sub procedure ili Function procedure
- Korištenjem funkcije u formuli radnog lista
Isprobajte ovu jednostavnu funkciju. Unesite ga u VBA modul:
Funkcija CubeRoot(broj)
Kockasti korijen = broj ^ (1/3)
Završna funkcija
Ova funkcija je prilično slaba; on samo izračunava kubni korijen broja koji mu je proslijeđen kao argument. To, međutim, pruža početnu točku za razumijevanje funkcija. Također ilustrira važan koncept o funkcijama: kako vratiti vrijednost. (Sjećate se da funkcija vraća vrijednost, zar ne?)
Primijetite da jedan redak koda koji čini ovu proceduru funkcije izvodi izračun. Rezultat matematike (broj na stepen od 1⁄3) pripisuje se varijabli CubeRoot. Nije slučajno, CubeRoot je i naziv funkcije. Da biste rekli funkciji koju vrijednost treba vratiti, dodijelite tu vrijednost imenu funkcije.
Pozivanje funkcije Excel VBA iz potprocedure
Budući da ne možete izravno izvršiti funkciju, morate je pozvati iz druge procedure. Unesite sljedeću jednostavnu proceduru u isti VBA modul koji sadrži funkciju CubeRoot:
Sub CallerSub()
Odgovor = Kockasti korijen (125)
MsgBox Ans
Kraj Sub
Kada izvršite CallerSub proceduru, Excel prikazuje okvir s porukom koji sadrži vrijednost varijable Ans, koja je 5.
Evo što se događa: funkcija CubeRoot se izvršava i prima argument od 125. Izračun se izvodi pomoću koda funkcije (koristeći vrijednost proslijeđenu kao argument), a vraćena vrijednost funkcije dodjeljuje se varijabli Ans. Funkcija MsgBox tada prikazuje vrijednost varijable Ans.
Pokušajte promijeniti argument koji je proslijeđen funkciji CubeRoot i ponovno pokrenite makronaredbu CallerSub. Radi baš kako bi trebao - pod pretpostavkom da date funkciji valjani argument (pozitivan broj).
Inače, postupak CallerSub bi se mogao malo pojednostaviti. Varijabla Ans zapravo nije potrebna osim ako vaš kod kasnije ne koristi tu varijablu. Možete koristiti ovu jednu naredbu da dobijete isti rezultat:
MsgBox CubeRoot (125)
Pozivanje Excel VBA funkcije iz formule radnog lista
Sada je vrijeme da pozovete ovu proceduru VBA funkcije iz formule radnog lista. Aktivirajte radni list u istoj radnoj knjizi koja sadrži definiciju funkcije CubeRoot. Zatim u bilo koju ćeliju unesite sljedeću formulu:
=kockasti korijen (1728)
Ćelija prikazuje 12, što je doista kubni korijen od 1728.
Kao što možete očekivati, možete koristiti referencu ćelije kao argument za funkciju CubeRoot. Na primjer, ako ćelija A1 sadrži vrijednost, možete unijeti =CubeRoot(A1) . U ovom slučaju, funkcija vraća broj dobiven izračunavanjem kubnog korijena vrijednosti u A1.
Ovu funkciju možete koristiti bilo koji broj puta u radnom listu. Poput ugrađenih funkcija Excela, vaše se prilagođene funkcije pojavljuju u dijaloškom okviru Umetanje funkcije. Kliknite gumb Umetanje funkcije na alatnoj traci i odaberite kategoriju Korisnički definirano. Kao što je prikazano u nastavku, dijaloški okvir Umetanje funkcije navodi vašu vlastitu funkciju.
Funkcija CubeRoot pojavljuje se u kategoriji Korisnički definirano dijaloškog okvira Umetanje funkcije.
Ako želite da dijaloški okvir Umetanje funkcije prikazuje opis funkcije, slijedite ove korake:
Odaberite Programer → Kod → Makronaredbe.
Excel prikazuje dijaloški okvir Makronaredba, ali se CubeRoot ne pojavljuje na popisu. (CubeRoot je funkcija funkcije, a ovaj popis prikazuje samo potprocedure.) Ne brinite.
Upišite riječ CubeRoot u okvir Ime makronaredbe.
Kliknite gumb Opcije.
Unesite opis funkcije u okvir Opis.
Kliknite OK da zatvorite dijaloški okvir Mogućnosti makronaredbe.
Zatvorite dijaloški okvir Macro klikom na gumb Odustani.
Ovaj se opisni tekst sada pojavljuje u dijaloškom okviru Umetanje funkcije.
Ova slika prikazuje funkciju CubeRoot koja se koristi u formulama radnog lista.
Korištenje funkcije CubeRoot u formulama.
Do sada bi vam se stvari možda počele slagati.