Dogodki Excel VBA

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.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave