Dogodki se dogajajo ves čas, ko uporabnik odpre Excelov delovni zvezek in začne izvajati različna dejanja, na primer vnos podatkov v celice ali premikanje med listi
Znotraj urejevalnika Visual Basic (ALT+F11) so že nastavljene podprogrami, ki se lahko sprožijo, ko uporabnik naredi nekaj, npr. vnos podatkov v celico. Podprogram ne vsebuje nobene kode dejanj, samo stavek „Sub“ in stavek „End Sub“ brez kode med njima. Dejansko mirujejo, zato se nič ne zgodi, dokler ne vnesete kode.
Tu je primer, ki temelji na dogodku »Spremeni« na delovnem listu:
Kot programer VBA lahko dodate kodo, da se nekatere stvari zgodijo, ko uporabnik izvede določeno dejanje. To vam daje možnost, da nadzirate uporabnika in mu preprečite dejanja, ki jih ne želite, in ki bi lahko poškodovala vaš delovni zvezek. Morda boste na primer želeli, da shranijo svojo lastno kopijo delovnega zvezka pod drugim imenom, da ne vplivajo na izvirnik, ki ga lahko uporabljajo številni uporabniki.
Če zaprejo delovni zvezek, bodo samodejno pozvani, da shranijo spremembe. Delovni zvezek pa ima dogodek "BeforeClose" in lahko vnesete kodo, da preprečite, da bi se delovni zvezek zaprl in sprožil dogodek "Shrani". Nato lahko na delovni list dodate gumb in vanj vnesete svojo lastno rutino »Shrani«. Prav tako lahko onemogočite rutino »Shrani« z dogodkom »Pred shranjevanjem«
Razumevanje delovanja dogodkov je za programerja VBA nujno.
Vrste dogodkov
Delovni zvezek Dogodki - ti dogodki se sprožijo glede na to, kaj uporabnik naredi s samim delovnim zvezkom. Vključujejo dejanja uporabnikov, na primer odpiranje delovnega zvezka, zapiranje delovnega zvezka, shranjevanje delovnega zvezka, dodajanje ali brisanje lista
Dogodki na delovnem listu - te dogodke sproži uporabnik, ki izvaja dejanja na določenem delovnem listu. Vsak delovni list v delovnem zvezku ima posamezen kodni modul, ki vsebuje različne dogodke posebej za ta delovni list (ne za vse delovne liste). Ti vključujejo dejanja uporabnikov, na primer spreminjanje vsebine celice, dvojni klik celice ali desni klik celice.
Aktivni nadzorni dogodki X - Kontrolnike Active X lahko dodate na delovni list z ikono »Vstavi« na zavihku »Razvijalec« na Excelovem traku. To so pogosto gumbi za upravljanje, ki uporabniku omogočajo, da izvaja različna dejanja pod nadzorom vaše kode, lahko pa so tudi predmeti, kot so spustni meniji. Uporaba kontrolnikov Active X v nasprotju s kontrolniki obrazcev na delovnem listu daje celoten prostor za programiranje. Kontrolniki Active X vam dajejo veliko večjo prilagodljivost s programskega vidika glede uporabe kontrolnikov obrazcev na delovnem listu.
Na delovnem listu bi lahko imeli na primer dve spustni kontrolniki. Želite, da seznam, ki je na voljo v drugem spustnem meniju, temelji na tem, kaj je uporabnik izbral v prvem spustnem meniju. Z dogodkom »Spremeni« v prvem spustnem meniju lahko ustvarite kodo, da preberete, kaj je uporabnik izbral, in nato posodobite drugi spustni meni. Drugi spustni meni lahko tudi deaktivirate, dokler uporabnik ne izbere prvega spustnega menija
Dogodki UserForm - Lahko vstavite in oblikujete obrazec profesionalnega videza, ki ga boste uporabili kot pojavno okno. Vsi kontrolniki, ki jih postavite v obrazec, so kontrolniki Active X in imajo enake dogodke kot kontrolniki Active X, ki jih lahko postavite na delovni list
Dogodki na grafikonu - Ti dogodki so povezani le z diagramom in ne s grafikonom, ki se pojavi kot del delovnega lista. Ti dogodki vključujejo spreminjanje velikosti grafikona ali izbiro grafikona.
Dogodki aplikacije - Ti uporabljajo objekt Application v VBA. Primeri bi omogočili sprožitev kode, ko pritisnete določeno tipko ali ko je dosežen določen čas. Lahko bi programirali situacijo, ko delovni zvezek ostane odprt 24 ur na dan in vsak dan uvozi podatke iz zunanjega vira čez noč v vnaprej določenem času.
Nevarnosti uporabe kode v dogodkih
Ko pišete kodo, da naredite nekaj, ko uporabnik izvede določeno dejanje, morate upoštevati, da bi lahko vaša koda sprožila druge dogodke, zaradi česar bi lahko bila vaša koda v neprekinjeni zanki.
Recimo, da na delovnem listu uporabite dogodek »Spremeni«, tako da ko uporabnik vnese vrednost v celico, se izračun na podlagi te celice vstavi v celico tik desno od nje.
Težava je v tem, da umestitev izračunane vrednosti v celico sproži nov dogodek »Spremeni«, ki nato sproži še en dogodek »Spremeni« in tako naprej, dokler kodi ne zmanjka stolpcev za uporabo in se vrne navzgor sporočilo o napaki.
Pri pisanju kode za dogodek morate dobro premisliti, da zagotovite, da se drugi dogodki ne bodo nenamerno sprožili
Onemogoči dogodke
Če želite odpraviti to težavo, lahko s kodo onemogočite dogodke. Kar morate storiti, je, da vključite kodo, da onemogočite dogodke med izvajanjem kode dogodka, in nato znova omogočite dogodke na koncu kode. Tukaj je primer, kako to storiti:
1234 | Sub DisableEvents ()Application.EnableEvents = FalseApplication.EnableEvents = TrueEnd Sub |
Upoštevajte, da to onemogoči vse dogodke v celotni aplikaciji Excel, zato bi to vplivalo tudi na druge funkcije v Excelu. Če to uporabljate iz kakršnega koli razloga, se prepričajte, da se dogodki pozneje znova vklopijo.
Pomen parametrov pri dogodkih
Dogodki imajo običajno parametre, s katerimi lahko izveste več o tem, kaj uporabnik počne, in o lokaciji celice, v kateri se nahaja.
Dogodek Sprememba delovnega lista je na primer videti tako:
1 | Zasebni pod -delovni list_Sprememba (cilj ByVal kot obseg) |
Z uporabo predmeta obseg lahko ugotovite koordinate vrstice/stolpca celice, v katerih je uporabnik.
1234 | Zasebni pod -delovni list_Sprememba (cilj ByVal kot obseg)MsgBox Target.ColumnMsgBox Target.RowEnd Sub |
Če želite, da vaša koda deluje le na določeni številki stolpca ali vrstice, dodajte pogoj, ki zapušča podprogram, če stolpec ni zahtevan.
123 | Zasebni pod -delovni list_Sprememba (cilj ByVal kot obseg)Če ciljate 2. stolpec, potem zapustite podEnd Sub |
To odpravlja problem, da vaša koda sproži več dogodkov, saj bo delovala le, če je uporabnik spremenil celico v stolpcu 2 (stolpec B)
Primeri dogodkov v delovnem zvezku (niso izčrpni)
Dogodki v delovnem zvezku so v objektu »ThisWorkbook« v Raziskovalcu projektov VBE. V prvem spustnem meniju v oknu za kodo boste morali izbrati "Delovni zvezek", nato pa bodo v drugem spustnem meniju prikazani vsi razpoložljivi dogodki.
Odprti dogodek delovnega zvezka
Ta dogodek se sproži vsakič, ko uporabnik odpre delovni zvezek. Z njim lahko uporabniku pošljete pozdravno sporočilo, tako da zajamete njegovo uporabniško ime
123 | Private Sub Workbook_Open ()MsgBox "Dobrodošli" & Application.UserNameEnd Sub |
Njihovo uporabniško ime lahko preverite tudi na seznamu na skritem listu in preverite, ali so pooblaščeni za dostop do delovnega zvezka. Če niso pooblaščeni uporabniki, lahko prikažete sporočilo in zaprete delovni zvezek, tako da ga ne morejo uporabljati.
Dogodek novega lista v delovnem zvezku
Ta dogodek se sproži, ko uporabnik v delovni zvezek doda nov list
S to kodo si lahko samo dovolite dodajanje novega lista, namesto da bi različni uporabniki dodajali liste in delali nered v delovnem zvezku
1234567 | Private Sub Workbook_NewSheet (ByVal Sh As Object)Application.DisplayAlerts = NapačnoČe Application.UserName "Richard" PotemSh.DeleteKonec ČeApplication.DisplayAlerts = ResEnd Sub |
Upoštevajte, da morate opozorila izklopiti, saj se ob izbrisu lista prikaže opozorilo uporabnika, ki uporabniku omogoča, da se izogne vaši kodi. Pozneje znova vklopite opozorila!
Utrujen od iskanja primerov kode VBA? Preizkusite AutoMacro!
Delovni zvezek pred shranjevanjem dogodka
Ta dogodek se sproži, ko uporabnik klikne ikono »Shrani«, vendar preden se »Shrani« dejansko zgodi
Kot je opisano prej, boste morda želeli preprečiti, da bi uporabniki shranili svoje spremembe v izvirni delovni zvezek, in jih prisiliti, da ustvarijo novo različico z gumbom na delovnem listu. Vse, kar morate storiti, je, da spremenite parameter »Prekliči« v True in delovnega zvezka nikoli ne morete shraniti po običajni metodi.
123 | Private Sub Workbook_BeforeSave (ByVal SaveAsUI kot Boolean, Cancel As Boolean)Prekliči = resEnd Sub |
Delovni zvezek pred zaključnim dogodkom
Ta dogodek lahko uporabite, da preprečite, da bi uporabniki zaprli delovni zvezek, in jih znova prisilite k izhodu z gumbom na delovnem listu. Ponovno nastavite parameter »Prekliči« na »True«. Rdeči X v zgornjem desnem kotu okna Excel ne deluje več.
123 | Private Sub Workbook_BeforeClose (Prekliči kot logično)Prekliči = resEnd Sub |
Primeri dogodkov na delovnem listu (niso izčrpni)
Dogodki delovnega lista so pod objektom določenega imena lista v Raziskovalcu projektov VBE. V prvem spustnem meniju v oknu za kodo boste morali izbrati "Delovni list", nato pa bodo v drugem spustnem meniju prikazani vsi razpoložljivi dogodki
Dogodek spremembe delovnega lista
Ta dogodek se sproži, ko uporabnik spremeni delovni list, na primer vnese novo vrednost v celico
Ta dogodek lahko uporabite za vnos dodatne vrednosti ali komentarja poleg spremenjene celice, vendar, kot smo že omenili, ne želite začeti nastavljanja zanke dogodkov.
12345 | Zasebni pod -delovni list_Sprememba (cilj ByVal kot obseg)Če ciljate 2. stolpec, nato zapustite podActiveSheet.Cells (Target.Row, Target.Column + 1). Vrednost = _ActiveSheet.Cells (Target.Row, Target.Column). Vrednost * 1.1End Sub |
V tem primeru bo koda delovala le, če je vrednost vnesena v stolpec B (stolpec 2). Če je to res, bo številki dodalo 10% in jo postavilo v naslednjo razpoložljivo celico
Delovni list pred dogodkom dvojnega klika
Ta dogodek bo sprožil kodo, če uporabnik dvakrat klikne celico. To je lahko zelo koristno za finančna poročila, kot je bilanca stanja ali izkaz poslovnega izida, kjer bodo menedžerji verjetno izpodbijali številke, še posebej, če je zaključek negativen!
S tem lahko zagotovite podrobno analizo, tako da mora upravitelj, ko izzove določeno številko, dvakrat klikniti na številko in razčlenitev se prikaže kot del poročila.
To je z vidika uporabnika zelo impresivno in jim prihrani nenehno spraševanje, "zakaj je to število tako visoko?"
Če želite izvedeti naslov / merila za število (z lastnostmi predmeta Target), morate napisati kodo, nato pa filtrirati tabelarne podatke in jih nato kopirati v poročilo.
Programiranje VBA | Generator kod deluje za vas!
Delovni list Aktiviraj dogodek
Do tega dogodka pride, ko se uporabnik premakne z enega lista na drugega. Velja za nov list, na katerega se uporabnik premakne.
Z njim bi lahko zagotovili, da je nov list v celoti izračunan, preden uporabnik na njem karkoli počne. Uporablja se lahko tudi samo za ponovni izračun določenega lista brez ponovnega izračuna celotnega delovnega zvezka. Če je delovni zvezek velik in vsebuje zapleteno formulo, ponovni izračun enega lista prihrani veliko časa
123 | Zasebni pod -delovni list_Activate ()ActiveSheet.CalculateEnd Sub |
Aktivni nadzorni dogodki X (niso izčrpni)
Kot smo že omenili, lahko kontrolnike Active X dodate neposredno na delovni list. To so lahko ukazni gumbi, spustni seznami in polja s seznamom
Dogodki Active X so pod objektom imena določenega lista (kjer ste dodali kontrolnik) v Raziskovalcu projektov VBE. V prvem spustnem meniju v oknu za kodo boste morali izbrati ime kontrolnika Active X, nato pa bodo v drugem spustnem meniju prikazani vsi razpoložljivi dogodki
Ukazni gumb Kliknite Dogodek
Ko na preglednico postavite ukazni gumb, boste želeli, da izvede nekaj dejanj. To naredite tako, da na dogodek Click vnesete kodo.
Na to lahko preprosto vnesete sporočilo »Ali ste prepričani?«, Da se preveri, preden se koda zažene
12345 | Zasebni pod -ukaz Button1_Click ()Zatemni gumb Ponovi kot variantoButtonRet = MsgBox ("Ali ste prepričani, da želite to narediti?", VbQuestion Ali vbYesNo)Če je ButtonRet = vbNo Potem zapustite SubEnd Sub |
Spustni meni (kombinirano polje) Spremeni dogodek
Spustni meni Active X ima dogodek spremembe, tako da lahko, če uporabnik izbere določeno postavko s spustnega seznama, zabeležite njegovo izbiro s tem dogodkom in nato napišete kodo, da ustrezno prilagodite druge dele lista ali delovnega zvezka.
123 | Zasebno pomožno ComboBox1_Change ()MsgBox "Izbrali ste" & ComboBox1.TextEnd Sub |
Programiranje VBA | Generator kod deluje za vas!
Potrdite polje (potrditveno polje) Kliknite Dogodek
Na delovni list lahko dodate kljukico ali potrditveno polje, da uporabniku omogočite izbiro možnosti. Z dogodkom klika na njem lahko preverite, ali je uporabnik kaj spremenil glede tega. Vrnjene vrednosti so True ali False glede na to, ali je bila označena ali ne.
123 | Private Sub CheckBox1_Click ()MsgBox CheckBox 1. VrednostEnd Sub |
Dogodki uporabniškega obrazca (niso izčrpni)
Excel vam omogoča, da oblikujete svoje obrazce. Te so lahko zelo koristne za uporabo kot pojavna okna za zbiranje podatkov ali za uporabnikom več možnosti. Uporabljajo kontrolnike Active X, kot je opisano prej, in imajo popolnoma enake dogodke, čeprav so dogodki zelo odvisni od vrste nadzora.
Tu je primer preproste oblike:
Ko je prikazan, izgleda tako na zaslonu
Dogodke na obrazcu bi uporabili za opravljanje stvari, na primer za vnos privzetega imena podjetja, ko se obrazec odpre, za preverjanje, ali se vnos imena podjetja ujema z enim, ki je že v preglednici in ni bil napačno črkovan, ter za dodajanje kode kliku dogodke na gumbih 'OK' in 'Cancel'
Kodo in dogodke za obrazcem si lahko ogledate z dvojnim klikom kjer koli na obrazcu
Prvi spustni meni omogoča dostop do vseh kontrol na obrazcu. Drugi spustni meni bo omogočil dostop do dogodkov
Uporabniški obrazec Aktiviraj dogodek
Ta dogodek se sproži, ko je obrazec aktiviran, običajno ko je prikazan. Ta dogodek lahko uporabite za nastavitev privzetih vrednosti, npr. privzeto ime podjetja v besedilnem polju imena podjetja
123 | Zasebni pod -uporabniški obrazec_Activate ()TextBox1.Text = "Ime mojega podjetja"End Sub |
Programiranje VBA | Generator kod deluje za vas!
Spremeni dogodek
Večina kontrolnikov na obrazcu ima dogodek spremembe, vendar v tem primeru lahko besedilno polje imena podjetja uporabi dogodek za omejitev dolžine vnesenega imena podjetja
123456 | Zasebni podnapis TextBox1_Change ()Če je Len (TextBox1.Text)> 20 PotemMsgBox "Ime je omejeno na 20 znakov", vbCriticalTextBox1.Text = ""Konec ČeEnd Sub |
Kliknite Dogodek
Ta dogodek lahko uporabite za dejanje, ko uporabnik klikne na kontrolnike na obrazcu ali celo obrazec sam
Na tem obrazcu je gumb »V redu« in po zbiranju imena podjetja ga želimo postaviti v celico v preglednici za prihodnjo uporabo
1234 | Zasebni pod -ukaz Button1_Click ()ActiveSheet.Range ("A1"). Vrednost = TextBox 1. BesediloMe.SkrijEnd Sub |
Ta koda deluje, ko uporabnik klikne gumb »V redu«. Vnese vrednost v polje za vnos imena podjetja v celico A1 na aktivnem listu in nato skrije obrazec, tako da se uporabniški nadzor vrne nazaj na delovni list.
Dogodki na grafikonu
Dogodki grafikona delujejo samo na grafikonih, ki so na ločenem listu grafikonov, in ne na grafikonu, ki je vključen v standardni delovni list
Dogodki grafikonov so nekoliko omejeni in jih ni mogoče uporabiti na delovnem listu, kjer bi lahko imeli več grafikonov. Prav tako uporabniki ne želijo nujno preiti z delovnega lista s številkami na list grafikona - tukaj ni takojšnjega vizualnega vpliva
Najbolj uporaben dogodek bi bil ugotoviti komponento grafikona, na katero je uporabnik kliknil npr. segment v tortnem grafikonu ali palični stolpec, vendar to ni dogodek, ki je na voljo v standardnem obsegu dogodkov.
To težavo je mogoče rešiti z uporabo razreda za dodajanje dogodka 'Mouse Down', ki bo vrnil podrobnosti komponente grafikona, na katero je uporabnik kliknil. To se uporablja na grafikonu na delovnem listu.
To vključuje nekaj zelo zapletenega kodiranja, vendar so rezultati spektakularni. Ustvarite lahko vrtanje, npr. uporabnik klikne segment tortnega grafikona in ta grafikon se takoj skrije, na njegovem mestu pa se prikaže drugi grafikon, ki prikazuje tortni grafikon s podrobnostmi za izvirni segment, ali pa ustvarite tabelarne podatke, ki podpirajo ta segment tortnega grafikona.
Dogodki aplikacije
Objekt Application v VBA lahko uporabite za sprožitev kode glede na določen dogodek
Programiranje VBA | Generator kod deluje za vas!
Application.OnTime
Tako lahko v rednih časovnih presledkih sprožite del kode, dokler je delovni zvezek naložen v Excel. Morda boste želeli vsakih 10 minut samodejno shraniti delovni zvezek v drugo mapo ali pa pustiti delovni list teči čez noč, da boste lahko vnesli najnovejše podatke iz zunanjega vira.
V tem primeru se v modul vnese podprogram. Vsakih 5 minut prikaže polje s sporočilom, čeprav bi to lahko bil preprosto drug kodiran postopek. Hkrati časovnik ponastavi na trenutni čas plus 5 minut.
Vsakič, ko se zažene, se časovnik ponastavi, da zažene isto podprogram v naslednjih 5 minutah.
1234 | Sub TestOnTime ()MsgBox "Testiranje OnTime"Application.OnTime (Zdaj () + TimeValue ("00:05:00")), "TestOnTime"End Sub |
Application.OnKey
Ta funkcija vam omogoča, da sami oblikujete bližnjične tipke. Iz katere koli kombinacije tipk lahko naredite podprogram svojega ustvarjanja.
V tem primeru je črka "a" preusmerjena tako, da namesto "a" v celico prikaže polje s sporočilom. To kodo je treba vstaviti v vstavljen modul.
123456 | Pod TestKeyPress ()Application.OnKey "a", "TestKeyPress"End SubPod TestKeyPress ()MsgBox "Pritisnili ste" a ""End Sub |
Najprej zaženete podprogram "TestKeyPress". To morate zagnati samo enkrat. Excel pove, da bo vsakič, ko pritisnete črko "a", poklical podprogram "TestKeyPress". Podprogram "TestKeyPress" prikaže samo polje s sporočilom, ki vam pove, da ste pritisnili tipko "a". Seveda bi lahko naložil obrazec ali naredil vse druge stvari.
Uporabite lahko katero koli kombinacijo tipk, ki jo lahko uporabite s funkcijo 'SendKeys'
Če želite preklicati to funkcijo, zaženete stavek „OnKey“ brez parametra „Postopek“.
123 | Pod preklicOnKey ()Application.OnKey "a"End Sub |
Zdaj se je vse vrnilo v normalno stanje.