Excel VBA događaji

Događaji se događaju cijelo vrijeme kada korisnik otvori Excel radnu knjigu i počne raditi različite radnje, poput unosa podataka u ćelije ili premještanja između listova

Unutar Visual Basic Editor -a (ALT+F11) već su postavljene podrutine koje se mogu otpustiti kada korisnik učini nešto, npr. unošenje podataka u ćeliju. Potprogram ne daje nikakav kôd radnje, samo izraz "Sub" i izraz "End Sub" bez koda između njih. Učinkovito su uspavani pa se ništa ne događa dok ne unesete neki kôd.

Evo primjera temeljenog na događaju "Promjena" na radnom listu:

Kao VBA programer, možete dodati kôd kako bi se određene stvari dogodile kada korisnik poduzme određenu radnju. To vam daje priliku kontrolirati korisnika i spriječiti ga u poduzimanju radnji koje ne želite da rade i koje bi mogle oštetiti vašu radnu knjigu. Na primjer, možda biste htjeli da spreme svoju zasebnu kopiju radne knjige pod drugim imenom, tako da ne utječu na izvornik, koji može koristiti veći broj korisnika.

Ako zatvore radnu knjigu, od njih će se automatski zatražiti spremanje promjena. Međutim, radna knjiga ima događaj "BeforeClose" i možete unijeti kôd kako biste spriječili zatvaranje radne knjige i pokretanje događaja "Spremi". Zatim možete dodati gumb na radni list i na njega staviti vlastitu rutinu 'Spremi'. Također možete onemogućiti rutinu 'Spremi' pomoću događaja 'Prije spremanja'

Razumijevanje kako događaji funkcioniraju apsolutno je važno za VBA programera.

Vrste događaja

Radna bilježnica Događaji - ti se događaji pokreću na temelju onoga što korisnik radi sa samom radnom knjigom. Uključuju korisničke radnje kao što su otvaranje radne knjige, zatvaranje radne knjige, spremanje radne knjige, dodavanje ili brisanje lista

Događaji na radnom listu - te događaje pokreće korisnik koji poduzima radnje na određenom radnom listu. Svaki radni list u radnoj knjizi ima zasebni kodni modul koji sadrži različite događaje posebno za taj radni list (ne za sve radne listove). To uključuje korisničke radnje kao što su promjena sadržaja ćelije, dvostruki klik na ćeliju ili desni klik na ćeliju.

Aktivni događaji X kontrole - Aktivne X kontrole mogu se dodati na radni list pomoću ikone "Umetni" na kartici "Developer" na vrpci programa Excel. To su često kontrole gumba koje omogućuju korisniku poduzimanje različitih radnji pod kontrolom vašeg koda, ali mogu biti i objekti poput padajućih izbornika. Korištenje kontrola Active X za razliku od kontrola obrasca na radnom listu daje čitav prostor za programiranje. Aktivne X kontrole daju vam daleko veću fleksibilnost sa programskog gledišta u odnosu na korištenje kontrola obrasca na radnom listu.

Na primjer, na radnom listu možete imati dvije padajuće kontrole. Želite da se popis u drugom padajućem izborniku temelji na onome što je korisnik odabrao u prvom padajućem izborniku. Pomoću događaja 'Promijeni' na prvom padajućem izborniku možete stvoriti kôd za čitanje onoga što je korisnik odabrao, a zatim ažurirati drugi padajući izbornik. Također možete deaktivirati drugi padajući izbornik dok korisnik ne napravi odabir u prvom padajućem izborniku

Događaji UserForma - Možete umetnuti i dizajnirati obrazac profesionalnog izgleda koji će se koristiti kao skočni prozor. Sve kontrole koje postavite na obrazac su kontrole Active X i imaju iste događaje kao kontrole Active X koje možete postaviti na radni list

Događaji na grafikonu - Ovi se događaji odnose samo na list grafikona, a ne na grafikon koji se pojavljuje kao dio radnog lista. Ti događaji uključuju promjenu veličine grafikona ili odabir grafikona.

Događaji aplikacije - Oni koriste objekt Application u VBA. Primjeri bi omogućili aktiviranje koda kada se pritisne određena tipka ili kada se dosegne određeno vrijeme. Mogli biste programirati situaciju u kojoj radna knjiga ostaje otvorena 24 sata dnevno i uvozi podatke iz vanjskog izvora preko noći u unaprijed određeno vrijeme.

Opasnosti korištenja koda u događajima

Kada pišete kôd da biste učinili nešto kada korisnik poduzme određenu radnju, morate imati na umu da bi vaš kôd mogao pokrenuti druge događaje, što bi moglo dovesti vaš kôd u kontinuiranu petlju.

Na primjer, pretpostavimo da koristite događaj "Promijeni" na radnom listu tako da kada korisnik unese vrijednost u ćeliju, izračun na temelju te ćelije smjesti se u ćeliju odmah desno od nje.

Problem je u tome što postavljanje izračunate vrijednosti u ćeliju pokreće još jedan događaj "Promijeni", koji zatim opet pokreće još jedan događaj "Promijeni", i tako dalje sve dok vašem kodu ne ponestanu stupci za upotrebu i ne povrati poruku o grešci.

Prilikom pisanja koda za događaj morate dobro razmisliti kako biste bili sigurni da se drugi događaji neće nenamjerno pokrenuti

Onemogući događaje

Pomoću koda možete onemogućiti događaje da biste zaobišli ovaj problem. Ono što ćete morati učiniti je uključiti kôd za onemogućavanje događaja dok se kôd događaja izvodi, a zatim ponovno omogućiti događaje na kraju koda. Evo primjera kako to učiniti:

1234 Sub DisableEvents ()Application.EnableEvents = NetačnoApplication.EnableEvents = IstinaKraj podm

Imajte na umu da se time onemogućuju svi događaji u cijeloj Excel aplikaciji, pa bi to utjecalo i na druge funkcije u Excelu. Ako ovo koristite iz bilo kojeg razloga, pobrinite se da se događaji kasnije ponovno uključe.

Važnost parametara u događajima

Događaji obično imaju parametre pomoću kojih možete saznati više o tome što korisnik radi i mjestu ćelije u kojoj se nalazi.

Na primjer, događaj Promjena radnog lista izgleda ovako:

1 Privatni podradni list_Promjena (ByVal cilj kao raspon)

Pomoću objekta range možete saznati koordinate redaka/stupca ćelije u kojima se korisnik zapravo nalazi.

1234 Privatni podradni list_Promjena (ByVal cilj kao raspon)MsgBox Target.ColumnMsgBox Target.RowKraj podm

Ako želite da vaš kôd radi samo na određenom broju stupca ili retka, tada dodajte uvjet koji izlazi iz potprograma ako stupac nije potreban.

123 Privatni podradni list_Promjena (ByVal cilj kao raspon)Ako Target.Column 2 Zatim izađite iz SubKraj podm

To zaobilazi problem vašeg koda koji pokreće više događaja, jer će funkcionirati samo ako je korisnik promijenio ćeliju u stupcu 2 (stupac B)

Primjeri događaja iz radne bilježnice (nisu iscrpni)

Događaji radne knjige nalaze se pod objektom ‘ThisWorkbook’ u VBE Project Exploreru. Morat ćete odabrati "Radna knjiga" na prvom padajućem izborniku u prozoru koda, a zatim će vam drugi padajući izbornik pokazati sve dostupne događaje

Otvoreni događaj radne sveske

Ovaj se događaj pokreće kad god korisnik otvori radnu knjigu. Možete ga upotrijebiti za slanje poruke dobrodošlice korisniku tako što ćete zabilježiti njegovo korisničko ime

123 Privatna pomoćna radna knjiga_Open ()MsgBox "Dobrodošli" & Application.UserNameKraj podm

Također možete provjeriti njihovo korisničko ime na popisu koji se nalazi na skrivenom listu kako biste provjerili jesu li ovlašteni za pristup radnoj knjizi. Ako nisu ovlašteni korisnik, možete prikazati poruku i zatvoriti radnu knjigu tako da je ne mogu koristiti.

Događaj Novi list radne sveske

Ovaj se događaj pokreće kada korisnik doda novi list u radnu knjigu

Ovaj kôd mogli biste koristiti samo za dopuštanje dodavanja novog lista, umjesto da svi različiti korisnici dodaju listove i prave nered u radnoj knjizi

1234567 Privatna pod -radna knjiga_Novinski list (ByVal Sh kao objekt)Application.DisplayAlerts = NetačnoAko Application.UserName "Richard" TadaSh.DeleteZavrši akoApplication.DisplayAlerts = IstinaKraj podm

Imajte na umu da morate isključiti upozorenja jer će se upozorenje korisnika pojaviti kada se list izbriše što omogućuje korisniku da zaobiđe vaš kôd. Obavezno ponovno uključite upozorenja!

Umorni ste od traženja primjera VBA koda? Isprobajte AutoMacro!

Radna knjiga prije spremanja događaja

Ovaj se događaj pokreće kada korisnik klikne ikonu "Spremi", ali prije nego što se "Spremi" doista dogodi

Kao što je ranije opisano, možda ćete htjeti spriječiti korisnike da spremaju svoje promjene u izvornu radnu knjigu i prisiliti ih da stvore novu verziju pomoću gumba na radnom listu. Sve što trebate učiniti je promijeniti parametar ‘Cancel’ u True, a radna se knjiga nikada ne može spremiti konvencionalnom metodom.

123 Private Sub Workbook_BeforeSave (ByVal SaveAsUI kao Boolean, Cancel As Boolean)Odustani = IstinaKraj podm

Radna bilježnica prije zatvaranja događaja

Ovaj događaj možete upotrijebiti za sprječavanje zatvaranja radne knjige i ponovno ih natjerati da izađu putem gumba na radnom listu. Ponovno postavljate parametar 'Cancel' na 'True'. Crveni X u gornjem desnom kutu prozora programa Excel više ne radi.

123 Private Sub Workbook_BeforeClose (Otkaži kao logičko)Odustani = IstinaKraj podm

Primjeri događaja na radnom listu (nisu iscrpni)

Događaji radnog lista nalaze se pod određenim objektom naziva lista u VBE Project Exploreru. Morat ćete odabrati "Radni list" na prvom padajućem izborniku u prozoru koda, a zatim će vam drugi padajući izbornik pokazati sve dostupne događaje

Događaj promjene radnog lista

Ovaj se događaj pokreće kada korisnik izvrši promjenu na radnom listu, na primjer, unošenjem nove vrijednosti u ćeliju

Ovaj događaj možete upotrijebiti za stavljanje dodatne vrijednosti ili komentara pored promijenjene ćelije, ali kao što je ranije rečeno, ne želite započeti postavljanje petlje događaja.

12345 Privatni podradni list_Promjena (ByVal cilj kao raspon)Ako Target.Column 2 Zatim izađite iz SubActiveSheet.Cells (Target.Row, Target.Column + 1). Vrijednost = _ActiveSheet.Cells (Target.Row, Target.Column). Vrijednost * 1.1Kraj podm

U ovom primjeru kôd će funkcionirati samo ako se vrijednost unese u stupac B (stupac 2). Ako je to točno, to će dodati 10% broju i smjestiti ga u sljedeću dostupnu ćeliju

Radni list prije događaja dvostrukog klika

Ovaj će se događaj aktivirati ako korisnik dvaput klikne na ćeliju. To može biti iznimno korisno za financijska izvješća kao što je bilanca stanja ili račun dobiti i gubitka gdje će menadžeri vjerojatno osporiti brojeve, osobito ako je krajnji rezultat negativan!

To možete upotrijebiti za pružanje mogućnosti detaljnog pregleda, tako da kad upravitelj izazove određeni broj, sve što trebaju učiniti je dvaput kliknuti na broj, a raščlamba se pojavljuje kao dio izvješća.

Ovo je vrlo impresivno sa stajališta korisnika i spašava ih stalnih pitanja 'zašto je ovaj broj tako visok?'

Morali biste napisati kôd da biste saznali naslov / kriterije za broj (koristeći svojstva objekta Target), a zatim filtrirati tablične podatke, a zatim ih kopirati u izvješće.

VBA programiranje | Generator koda radi za vas!

Radni list Aktiviraj događaj

Do ovog događaja dolazi kada se korisnik premjesti s jednog lista na drugi. Odnosi se na novi list na koji korisnik prelazi.

Moglo bi se upotrijebiti za osiguranje da se novi list potpuno izračuna prije nego što korisnik na njemu počne bilo što raditi. Također se može koristiti samo za ponovno izračunavanje tog određenog lista bez ponovnog izračuna cijele radne knjige. Ako je radna knjiga velika i ima kompliciranu formulu, ponovni izračun jednog lista štedi mnogo vremena

123 Privatni podradni list_Activate ()ActiveSheet.CalculateKraj podm

Događaji aktivne kontrole X (nisu iscrpni)

Kao što je ranije rečeno, možete dodati kontrole Active X izravno na radni list. To mogu biti naredbeni gumbi, padajući izbornici i okviri s popisima

Aktivni X događaji nalaze se pod određenim objektom naziva lista (gdje ste dodali kontrolu) u VBE Project Exploreru. Morat ćete odabrati naziv kontrole Active X na prvom padajućem izborniku u prozoru koda, a zatim će vam drugi padajući izbornik pokazati sve dostupne događaje

Naredba Tipka Kliknite Događaj

Kad stavite gumb naredbe u proračunsku tablicu, htjet ćete da poduzme određene radnje. To činite stavljanjem koda na događaj Click.

Na ovo možete jednostavno staviti poruku "Jeste li sigurni?" Kako bi se provjerila prije pokretanja koda

12345 Privatna pomoćna naredbaButton1_Click ()Dim ButtonRet kao varijantaButtonRet = MsgBox ("Jeste li sigurni da to želite učiniti?", VbQuestion Ili vbYesNo)Ako je ButtonRet = vbNo Zatim izađite iz SubKraj podm

Padajući izbornik (kombinirani okvir) Promijeni događaj

Padajući izbornik Active X ima događaj promjene, tako da ako korisnik odabere određenu stavku s padajućeg popisa, možete zabilježiti njegov izbor pomoću ovog događaja, a zatim napisati kôd kako biste u skladu s tim prilagodili druge dijelove lista ili radne knjige.

123 Privatni pomoćni ComboBox1_Change ()MsgBox "Odabrali ste" & ComboBox1.TextKraj podm

VBA programiranje | Generator koda radi za vas!

Potvrdite okvir (potvrdni okvir) Pritisnite Događaj

Radnom listu možete dodati kvačicu ili potvrdni okvir kako biste korisniku pružili mogućnosti izbora. Možete koristiti događaj klika na njemu da vidite je li korisnik nešto promijenio u vezi s tim. Vraćene vrijednosti su True ili False ovisno o tome je li označeno ili nije.

123 Privatni Sub CheckBox1_Click ()MsgBox CheckBox1.VrijednostKraj podm

Događaji korisničkog obrasca (nisu iscrpni)

Excel vam pruža mogućnost dizajniranja vlastitih obrazaca. To može biti vrlo korisno koristiti kao skočne prozore za prikupljanje informacija ili za pružanje višestrukih izbora korisniku. Koriste Active X kontrole kao što je prethodno opisano i imaju potpuno iste događaje, iako događaji uvelike ovise o vrsti kontrole.

Evo primjera jednostavnog oblika:

Kad se prikaže ovako izgleda na ekranu

Događaje na obrascu mogli biste koristiti za unošenje zadanog naziva tvrtke kada se obrazac otvori, za provjeru slaže li se naziv tvrtke s onim koji je već u proračunskoj tablici i nije li pogrešno napisan te za dodavanje koda kliku događaje na gumbima 'OK' i 'Cancel'

Kôd i događaji iza obrasca mogu se vidjeti dvostrukim klikom bilo gdje na obrascu

Prvi padajući izbornik omogućuje pristup svim kontrolama na obrascu. Drugi padajući izbornik omogućit će pristup događajima

UserForm Activate Event

Ovaj se događaj pokreće kada je obrazac aktiviran, obično kada se prikaže. Ovaj se događaj može koristiti za postavljanje zadanih vrijednosti, npr. zadani naziv tvrtke u tekstualnom okviru naziva tvrtke

123 Privatni pod -korisnički obrazac_Activate ()TextBox1.Text = "Naziv moje tvrtke"Kraj podm

VBA programiranje | Generator koda radi za vas!

Promijeni događaj

Većina kontrola na obrascu ima događaj promjene, ali u ovom primjeru tekstualni okvir naziva tvrtke može koristiti događaj za postavljanje ograničenja na duljinu naziva tvrtke koji se unosi

123456 Privatni pod TextBox1_Change ()Ako je Len (TextBox1.Text)> 20 ZatimMsgBox "Ime je ograničeno na 20 znakova", vbCriticalTextBox1.Text = ""Završi akoKraj podm

Pritisnite Događaj

Ovaj događaj možete koristiti za poduzimanje radnji od korisnika koji klikne na kontrole na obrascu, pa čak i na samom obrascu

Na ovom se obrascu nalazi gumb "U redu", a nakon što smo prikupili naziv tvrtke, htjeli bismo ga postaviti u ćeliju na proračunskoj tablici za buduću upotrebu

1234 Privatna pomoćna naredbaButton1_Click ()ActiveSheet.Range ("A1"). Vrijednost = TextBox1.TextJa.SkrijKraj podm

Ovaj kôd djeluje kada korisnik klikne gumb "U redu". Stavlja vrijednost u okvir za unos naziva tvrtke u ćeliju A1 na aktivnom listu, a zatim skriva obrazac tako da se korisnička kontrola vraća na radni list.

Događaji na grafikonu

Događaji grafikona rade samo na grafikonima koji su na zasebnom listu grafikona, a ne na grafikonu koji je ugrađen u standardni radni list

Događaji grafikona donekle su ograničeni i ne mogu se koristiti na radnom listu na kojem možete imati više grafikona. Također, korisnici ne moraju nužno prelaziti s radnog lista koji sadrži brojeve na list grafikona - ovdje nema neposrednog vizualnog utjecaja

Najkorisniji događaj bio bi saznati komponentu grafikona na koju je korisnik kliknuo, npr. segment u tortnom grafikonu ili traka na trakastom grafikonu, ali to nije događaj dostupan u standardnom rasponu događaja.

Ovaj se problem može riješiti korištenjem modula klase za dodavanje događaja 'Mouse Down' koji će vratiti detalje komponente grafikona na koju je korisnik kliknuo. Ovo se koristi na grafikonu unutar radnog lista.

To uključuje vrlo komplicirano kodiranje, ali rezultati su spektakularni. Možete stvoriti bušilice, npr. korisnik klikne na segment tortnog grafikona i trenutačno je taj grafikon skriven, a na njegovom se mjestu pojavljuje drugi grafikon koji prikazuje tortni grafikon s detaljima za izvorni segment, ili možete izraditi tablične podatke koji podržavaju taj segment tortnog grafikona.

Događaji aplikacije

Objekt Application u VBA možete koristiti za otpuštanje koda prema određenom događaju

VBA programiranje | Generator koda radi za vas!

Primjena.Ne vrijeme

To vam može omogućiti da u redovitim intervalima otpuštate dio koda sve dok je radna knjiga učitana u Excel. Možda ćete željeti automatski spremiti svoju radnu knjigu u drugu mapu svakih 10 minuta ili ostaviti radni list da radi preko noći kako biste unijeli najnovije podatke iz vanjskog izvora.

U ovom primjeru, podprogram se unosi u modul. Prikazuje okvir za poruke svakih 5 minuta, iako bi to lako mogao biti još jedan kodirani postupak. Istodobno, resetira mjerač vremena na trenutno vrijeme plus još 5 minuta.

Svaki put kad se pokrene, mjerač vremena resetira se za pokretanje iste podrutine u sljedećih 5 minuta.

1234 Sub TestOnTime ()MsgBox "Testiranje na vremenu"Application.OnTime (Sada () + TimeValue ("00:05:00")), "TestOnTime"Kraj podm

Aplikacija.OnKey

Ova vam funkcija omogućuje da sami dizajnirate tipke za prečace. Možete učiniti bilo koju kombinaciju tipki pozivom podrutine vašeg stvaranja.

U ovom primjeru slovo 'a' preusmjerava se tako da umjesto stavljanja 'a' u ćeliju prikazuje okvir s porukom. Ovaj kôd treba staviti u umetnuti modul.

123456 Pod TestKeyPress ()Application.OnKey "a", "TestKeyPress"Kraj podmPod TestKeyPress ()MsgBox "Pritisnuli ste" a ""Kraj podm

Pokrećete podrutinu "TestKeyPress" prije svega. Ovo morate pokrenuti samo jednom. Excel govori da će svaki put kad se pritisne slovo "a" pozvati podprogram "TestKeyPress". Potprogram "TestKeyPress" samo prikazuje okvir s porukom koji vam govori da ste pritisnuli tipku "a". Naravno, mogao bi učitati obrazac ili učiniti razne druge stvari.

Možete koristiti bilo koju kombinaciju tipki koju možete koristiti s funkcijom 'SendKeys'

Da biste otkazali ovu funkcionalnost, pokrećete naredbu 'OnKey' bez parametra 'Procedure'.

123 PododustaniOnKey ()Application.OnKey "a"Kraj podm

Sada se sve vratilo u normalu.

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave