„Excel VBA“ įvykiai

Įvykiai vyksta nuolat, kai vartotojas atidaro „Excel“ darbaknygę ir pradeda daryti įvairius veiksmus, pvz., Įvesti duomenis į langelius arba pereiti iš vieno lapo į kitą.

„Visual Basic“ redaktoriuje (ALT+F11) jau yra nustatytos papildomos procedūros, kurios gali būti išjungtos, kai vartotojas kažką daro, pvz. duomenų įvedimas į langelį. Antrinė rutina nepateikia jokio veiksmo kodo, tik „sub“ ir „end sub“ teiginius, tarp kurių nėra kodo. Jie veiksmingai neveikia, todėl nieko neįvyks, kol neįvesite kodo.

Štai pavyzdys, pagrįstas darbalapio įvykiu „Keisti“:

Kaip VBA programuotojas, galite pridėti kodą, kad kai kurie dalykai įvyktų, kai vartotojas atlieka konkretų veiksmą. Tai suteikia jums galimybę kontroliuoti naudotoją ir neleisti jam atlikti veiksmų, kurių nenorite, kad jie darytų ir kurie galėtų sugadinti jūsų darbaknygę. Pavyzdžiui, galite norėti, kad jie išsaugotų savo individualią darbaknygės kopiją kitu pavadinimu, kad jie nepaveiktų originalo, kurį gali naudoti daugelis vartotojų.

Jei jie uždarys darbaknygę, jie bus automatiškai paraginti išsaugoti pakeitimus. Tačiau darbaknygėje yra įvykis „BeforeClose“ ir galite įvesti kodą, kad neleistumėte uždaryti darbo knygos ir neįjungti įvykio „Išsaugoti“. Tada galite pridėti mygtuką prie paties darbalapio ir į jį įtraukti savo „Išsaugoti“ tvarką. Taip pat galite išjungti „Išsaugoti“ tvarką naudodami įvykį „BeforeSave“

Supratimas apie tai, kaip vyksta renginiai, yra būtinas VBA programuotojui.

Įvykių tipai

Darbo knyga Įvykiai - šie įvykiai išjungiami atsižvelgiant į tai, ką vartotojas daro su pačia darbo knyga. Tai apima vartotojo veiksmus, tokius kaip darbaknygės atidarymas, darbo knygos uždarymas, darbaknygės išsaugojimas, lapo pridėjimas arba ištrynimas

Užduoties įvykiai - šiuos įvykius įjungia vartotojas, atlikdamas veiksmus konkrečiame darbalapyje. Kiekvienas darbaknygės darbalapis turi atskirą kodo modulį, kuriame yra įvairių įvykių, skirtų būtent šiam darbalapiui (ne visiems darbalapiams). Tai apima vartotojo veiksmus, tokius kaip langelio turinio keitimas, dukart spustelėjus langelį arba dešiniuoju pelės mygtuku spustelėjus langelį.

„Active X Control“ įvykiai - „Active X“ valdiklius galima pridėti prie darbalapio naudojant „Įterpti“ piktogramą „Excel“ juostos skirtuke „Kūrėjas“. Tai dažnai yra mygtukų valdikliai, leidžiantys vartotojui atlikti įvairius veiksmus kontroliuojant jūsų kodą, tačiau jie taip pat gali būti objektai, tokie kaip išskleidžiamasis meniu. Naudojant „Active X“ valdiklius, o ne formos valdiklius darbalapyje, galima plačiai programuoti. „Active X“ valdikliai suteikia daug daugiau lankstumo programavimo požiūriu, nei naudojant formos valdiklius darbalapyje.

Pavyzdžiui, jūsų darbalapyje gali būti du išskleidžiamieji valdikliai. Norite, kad antrame išskleidžiamajame meniu esantis sąrašas būtų pagrįstas tuo, ką vartotojas pasirinko pirmame išskleidžiamajame meniu. Naudodami įvykį „Keisti“ pirmame išskleidžiamajame meniu, galite sukurti kodą, kad galėtumėte perskaityti, ką vartotojas pasirinko, ir tada atnaujinti antrąjį išskleidžiamąjį meniu. Taip pat galite išjungti antrąjį išskleidžiamąjį meniu, kol vartotojas pasirinks pirmąjį išskleidžiamąjį meniu

„UserForm“ įvykiai - Galite įterpti ir sukurti profesionaliai atrodančią formą, kuri būtų naudojama kaip iššokantis langas. Visi valdikliai, kuriuos įdedate į formą, yra „Active X“ valdikliai ir turi tuos pačius įvykius kaip „Active X“ valdikliai, kuriuos galite įdėti į darbalapį

Įvykių diagrama - Šie įvykiai yra susiję tik su diagramos lapu, o ne su diagrama, rodoma kaip darbalapio dalis. Šie įvykiai apima diagramos dydžio keitimą arba diagramos pasirinkimą.

Taikymo įvykiai - Jie naudoja programos objektą VBA. Pavyzdžiai leistų kodą išjungti, kai paspaudžiamas tam tikras klavišas arba kai pasiekiamas tam tikras laikas. Galite užprogramuoti situaciją, kai darbaknygė paliekama atvira visą parą ir ji importuoja duomenis iš išorinio šaltinio per naktį iš anksto nustatytu laiku.

Pavojai naudojant kodą renginiuose

Kai vartotojas atlieka tam tikrą veiksmą, kai rašote kodą, kad galėtumėte ką nors padaryti, turite nepamiršti, kad jūsų kodas gali sukelti kitus įvykius, dėl kurių jūsų kodas gali būti įtrauktas į nepertraukiamą ciklą.

Pvz., Tarkime, kad darbalapyje naudojate įvykį „Keisti“, kad vartotojui įvedus reikšmę į langelį, tuo langeliu pagrįstas skaičiavimas būtų dedamas į langelį, esantį dešinėje jo pusėje.

Problema ta, kad apskaičiuotos vertės įdėjimas į langelį suaktyvina kitą įvykį „Keisti“, kuris savo ruožtu suaktyvina dar vieną įvykį „Keisti“ ir taip toliau, kol jūsų kode nebelieka naudojamų stulpelių ir klaidos pranešimas.

Rašydami įvykio kodą turite gerai pagalvoti, kad kiti įvykiai nebūtų netyčia suaktyvinti

Išjungti įvykius

Norėdami išspręsti šią problemą, galite naudoti kodą, kad išjungtumėte įvykius. Ką turėsite padaryti, tai įtraukti kodą, kad išjungtumėte įvykius, kol jūsų įvykio kodas veikia, ir tada iš naujo įgalinti įvykius kodo pabaigoje. Štai pavyzdys, kaip tai padaryti:

1234 Sub DisableEvents ()Application.EnableEvents = NetiesaApplication.EnableEvents = TiesaPabaiga Sub

Turėkite omenyje, kad tai išjungia visus „Excel“ programos įvykius, todėl tai taip pat paveiks kitas „Excel“ funkcijas. Jei tai naudojate dėl kokių nors priežasčių, įsitikinkite, kad vėliau įvykiai vėl įjungiami.

Parametrų svarba renginiuose

Įvykiai paprastai turi parametrus, kuriuos galite naudoti norėdami sužinoti daugiau apie tai, ką daro vartotojas, ir langelio vietą, kurioje jie yra.

Pavyzdžiui, darbalapio keitimo įvykis atrodo taip:

1 Privatus antrinis darbalapio keitimas („ByVal Target“ kaip diapazonas)

Naudodami diapazono objektą, galite sužinoti langelio eilutės/stulpelio koordinates, kuriose iš tikrųjų yra vartotojas.

1234 Privatus antrinis darbalapio keitimas („ByVal Target“ kaip diapazonas)„MsgBox Target“. Stulpelis„MsgBox Target“. EilutėPabaiga Sub

Jei norite, kad jūsų kodas veiktų tik su tam tikru stulpelio ar eilutės numeriu, pridėkite sąlygą, kuri išeina iš paprogramės, jei stulpelis nėra būtinas.

123 Privatus antrinis darbalapio keitimas („ByVal Target“ kaip diapazonas)Jei taikinys. 2 stulpelis, tada išeikite iš antrinioPabaiga Sub

Tai pašalina problemą, kai jūsų kodas suaktyvina kelis įvykius, nes tai veiks tik tuo atveju, jei vartotojas pakeis 2 stulpelio langelį (B stulpelis)

Darbaknygės įvykių pavyzdžiai (neišsamus)

Darbaknygės įvykius rasite „VBE Project Explorer“ objekte „ThisWorkbook“. Pirmame kodo lango išskleidžiamajame meniu turėsite pasirinkti „Darbaknygė“, o tada antrame išskleidžiamajame meniu bus rodomi visi galimi įvykiai

Atviras darbo knygos įvykis

Šis įvykis įjungiamas kiekvieną kartą, kai vartotojas atidaro darbaknygę. Galite jį naudoti norėdami pateikti pasveikinimo pranešimą vartotojui užfiksuodami jo vartotojo vardą

123 Privati ​​antrinė darbo knyga_Atidaryti ()„MsgBox“ „Sveiki atvykę“ ir „Application.UserName“Pabaiga Sub

Taip pat galite patikrinti jų naudotojo vardą iš sąrašo, esančio paslėptame lape, kad sužinotumėte, ar jie turi prieigą prie darbo knygos. Jei jie nėra įgaliotas vartotojas, galite parodyti pranešimą ir uždaryti darbaknygę, kad jie negalėtų ja naudotis.

Darbaknygės naujo lapo įvykis

Šis įvykis suaktyvinamas, kai vartotojas prideda naują lapą prie darbaknygės

Galite naudoti šį kodą, kad leistumėte tik pridėti naują lapą, o ne skirtingi vartotojai, kurie pridėtų lapų ir sutvarkytų darbaknygę

1234567 Privatus antrinis darbaknygės_naujas lapas („ByVal Sh“ kaip objektas)Application.DisplayAlerts = NetiesaJei Application.UserName "Richard" TadaSh.DeletePabaiga JeiApplication.DisplayAlerts = TiesaPabaiga Sub

Atminkite, kad turite išjungti įspėjimus, nes ištrinus lapą pasirodys vartotojo įspėjimas, kuris leidžia vartotojui apeiti jūsų kodą. Įsitikinkite, kad po to vėl įjungėte įspėjimus!

Pavargote ieškoti VBA kodo pavyzdžių? Išbandykite „AutoMacro“!

Darbo knyga prieš įvykio išsaugojimą

Šis įvykis suaktyvinamas, kai naudotojas spustelėja „Išsaugoti“ piktogramą, bet prieš tai, kai „Išsaugoti“ iš tikrųjų įvyksta

Kaip aprašyta anksčiau, galbūt norėsite neleisti vartotojams išsaugoti pakeitimų pradinėje darbaknygėje ir priversti juos sukurti naują versiją naudojant darbalapio mygtuką. Viskas, ką jums reikia padaryti, tai pakeisti parametrą „Atšaukti“ į „True“, o darbaknygės niekada negalima išsaugoti įprastu metodu.

123 Privatus antrinis darbaknygė_BeforeSave (ByVal SaveAsUI kaip loginis, atšaukti kaip loginis)Atšaukti = tiesaPabaiga Sub

Darbo knyga prieš uždarą renginį

Šį įvykį galite naudoti norėdami neleisti vartotojams uždaryti darbaknygės ir vėl priversti juos išeiti per darbalapio mygtuką. Vėlgi, nustatykite parametrą „Atšaukti“ į „Tiesa“. Raudonas X viršutiniame dešiniajame „Excel“ lango kampe nebeveikia.

123 Privati ​​antrinė darbo knyga_BeforeClose (Atšaukti kaip loginis)Atšaukti = tiesaPabaiga Sub

Darbo lapo įvykių pavyzdžiai (neišsamus)

Skaičiuoklės įvykiai randami po konkrečiu lapo pavadinimo objektu „VBE Project Explorer“. Pirmame kodo lango išskleidžiamajame meniu turėsite pasirinkti „Darbo lapas“, o tada antrasis išskleidžiamasis meniu parodys visus galimus įvykius

Darbo lapo keitimo įvykis

Šis įvykis suaktyvinamas, kai vartotojas pakeičia darbalapį, pvz., Įveda naują reikšmę į langelį

Šį įvykį galite naudoti norėdami pridėti papildomos vertės ar komentaro šalia pakeisto langelio, tačiau, kaip aptarta anksčiau, nenorite pradėti nustatyti įvykių ciklo.

12345 Privatus antrinis darbalapio keitimas („ByVal Target“ kaip diapazonas)Jei taikinys. 2 stulpelis, tada išeikite iš antrinioActiveSheet.Cells (Target.Row, Target.Column + 1). Vertė = _ActiveSheet.Cells (Target.Row, Target.Column). Vertė * 1.1Pabaiga Sub

Šiame pavyzdyje kodas veiks tik tada, jei reikšmė bus įvesta į B stulpelį (2 stulpelis). Jei tai tiesa, tai prie skaičiaus pridės 10% ir įdės į kitą turimą langelį

Darbo lapas prieš dvigubo paspaudimo įvykį

Šis įvykis suaktyvins kodą, jei vartotojas dukart spustelės langelį. Tai gali būti labai naudinga rengiant finansines ataskaitas, pvz., Balansą ar pelno (nuostolio) ataskaitą, kur vadovai gali užginčyti skaičius, ypač jei esmė neigiama!

Tai galite naudoti norėdami atlikti išsamią informaciją, kad, kai vadovas užginčytų tam tikrą skaičių, jiems tereikia dukart spustelėti numerį ir suskirstymas rodomas kaip ataskaitos dalis.

Tai labai įspūdinga naudotojo požiūriu ir leidžia jiems nuolatos klausti „kodėl šis skaičius toks didelis?“.

Turite parašyti kodą, kad sužinotumėte skaičiaus antraštę / kriterijus (naudodami tikslinio objekto ypatybes), tada filtruokite lentelės duomenis ir nukopijuokite juos į ataskaitą.

VBA programavimas | Kodo generatorius jums tinka!

Darbo lapas Aktyvinti įvykį

Šis įvykis įvyksta, kai vartotojas pereina iš vieno lapo į kitą. Tai taikoma naujam lapui, į kurį naudotojas pereina.

Jis galėtų būti naudojamas siekiant užtikrinti, kad naujas lapas būtų visiškai apskaičiuotas prieš vartotojui pradedant ką nors daryti. Jis taip pat gali būti naudojamas tik tam tikram lapui iš naujo apskaičiuoti, neperskaičiuojant visos darbo knygos. Jei darbaknygė yra didelė ir sudėtinga formulė, iš naujo apskaičiuojant vieną lapą sutaupoma daug laiko

123 Privatus antrinis darbalapis_Aktyvuoti ()ActiveSheet.SkaičiuotiPabaiga Sub

„Active X Control“ įvykiai (neišsamus)

Kaip aptarta anksčiau, „Active X“ valdiklius galite pridėti tiesiai į darbalapį. Tai gali būti komandų mygtukai, išskleidžiamieji meniu ir sąrašų langeliai

„Active X“ įvykiai randami po konkrečiu lapo pavadinimo objektu (kur pridėjote valdiklį) „VBE Project Explorer“. Pirmame kodo lango išskleidžiamajame meniu turėsite pasirinkti „Active X“ valdiklio pavadinimą, o tada antrasis išskleidžiamasis meniu parodys visus galimus įvykius

Komandos mygtukas Spustelėkite Įvykis

Įdėję komandos mygtuką į skaičiuoklę, norėsite, kad ji atliktų tam tikrus veiksmus. Tai galite padaryti įvesdami kodą „Paspaudimo“ įvykiui.

Galite lengvai įterpti „Ar esate tikras pranešimas?“, Kad prieš paleidžiant kodą būtų atliktas patikrinimas

12345 Privati ​​antrinė komandaButton1_Click ()„Dim ButtonRet As Variant“ButtonRet = MsgBox ("Ar tikrai norite tai padaryti?", VbQuestion Or vbYesNo)Jei ButtonRet = vbNo, tada išeikite iš antrinioPabaiga Sub

Išskleidžiamojo (kombinuoto laukelio) pakeitimo įvykis

„Active X“ išskleidžiamajame meniu yra pakeitimo įvykis, todėl, jei vartotojas pasirenka tam tikrą elementą iš išskleidžiamojo sąrašo, galite užfiksuoti savo pasirinkimą naudodami šį įvykį ir tada parašyti kodą, kad atitinkamai pritaikytumėte kitas lapo ar darbaknygės dalis.

123 Privatus antrinis ComboBox1_Change ()MsgBox "Jūs pasirinkote" & ComboBox1.TextPabaiga Sub

VBA programavimas | Kodo generatorius jums tinka!

Pažymėkite langelį (žymės langelį) Spustelėkite Įvykis

Galite pridėti varnelę arba žymimąjį langelį prie darbalapio, kad vartotojas galėtų pasirinkti parinktis. Galite naudoti paspaudimo įvykį, kad pamatytumėte, ar vartotojas ką nors pakeitė. Grąžintos vertės yra teisingos arba klaidingos, atsižvelgiant į tai, ar jis buvo pažymėtas, ar ne.

123 Privatus antrinis laukelis1_Click ()MsgBox CheckBox1.ValuePabaiga Sub

„UserForm“ įvykiai (neišsamus)

„Excel“ suteikia galimybę kurti savo formas. Tai gali būti labai naudinga naudoti kaip iššokančiuosius langus informacijai rinkti arba vartotojui pateikti kelis pasirinkimus. Jie naudoja „Active X“ valdiklius, kaip aprašyta anksčiau, ir turi tuos pačius įvykius, nors įvykiai labai priklauso nuo valdymo tipo.

Štai paprastos formos pavyzdys:

Kai jis rodomas, tai atrodo ekrane

Naudodami formoje esančius įvykius atliktumėte tokius veiksmus kaip įveskite numatytąjį įmonės pavadinimą atidarę formą, kad patikrintumėte, ar įvestas įmonės pavadinimas sutinka su jau esančiu skaičiuoklėje ir ar jis nebuvo parašytas neteisingai, ir norėdami pridėti kodą prie paspaudimo įvykius mygtukais „Gerai“ ir „Atšaukti“

Formos kodą ir įvykius galima peržiūrėti dukart spustelėjus bet kurioje formos vietoje

Pirmasis išskleidžiamasis meniu suteikia prieigą prie visų formos valdiklių. Antrasis išskleidžiamasis meniu suteiks prieigą prie įvykių

„UserForm“ aktyvinimo įvykis

Šis įvykis suaktyvinamas suaktyvinus formą, paprastai kai ji rodoma. Šis įvykis gali būti naudojamas numatytosioms reikšmėms nustatyti, pvz. numatytasis įmonės pavadinimas įmonės pavadinimo teksto laukelyje

123 Privatus antrinis naudotojasForm_Activate ()TextBox1.Text = "Mano įmonės pavadinimas"Pabaiga Sub

VBA programavimas | Kodo generatorius jums tinka!

Keisti įvykį

Dauguma formos valdiklių turi pakeitimo įvykį, tačiau šiame pavyzdyje įmonės pavadinimo teksto laukelyje įvykis gali būti naudojamas norint apriboti įvedamos įmonės pavadinimo ilgį

123456 Privatus antrinis teksto laukelis1_Keisti ()Jei Len (TextBox1.Text)> 20 Tada„MsgBox“ „Vardas apribotas iki 20 simbolių“, „vbCritical“TextBox1.Text = ""Pabaiga JeiPabaiga Sub

Spustelėkite Įvykis

Šį įvykį galite naudoti norėdami imtis veiksmų, kai naudotojas spustelėja formos valdiklius ar net pačią formą

Šioje formoje yra mygtukas „Gerai“, o surinkę įmonės pavadinimą norėtume jį įdėti į skaičiuoklės langelį, kad vėliau būtų galima peržiūrėti

1234 Privati ​​antrinė komandaButton1_Click ()„ActiveSheet.Range“ („A1“). Reikšmė = TextBox1.TextAš.SlėpkPabaiga Sub

Šis kodas veikia, kai vartotojas spustelėja mygtuką „Gerai“. Įmonės pavadinimo įvesties laukelyje esanti reikšmė įtraukiama į aktyvaus lapo langelį A1, o paslėpta forma, kad vartotojo valdymas būtų grąžintas į darbalapį.

Įvykių diagrama

Diagramos įvykiai veikia tik tose diagramose, kurios yra atskirame diagramos lape, o ne diagramoje, kuri yra įtraukta į standartinį darbalapį

Diagramos įvykiai yra šiek tiek riboti ir negali būti naudojami darbalapyje, kuriame gali būti daug diagramų. Be to, vartotojai nebūtinai nori pereiti iš darbalapio, kuriame yra skaičiai, į diagramos lapą - čia nėra tiesioginio vizualinio poveikio

Naudingiausias įvykis būtų išsiaiškinti diagramos komponentą, kurį naudotojas spustelėjo, pvz. skritulinės diagramos segmentas arba juostos diagramos juosta, tačiau tai nėra įvykis, pasiekiamas standartiniame įvykių diapazone.

Šią problemą galima išspręsti naudojant klasės modulį ir pridedant įvykį „Pelė žemyn“, kuris pateiks išsamią informaciją apie diagramos komponentą, kurį naudotojas spustelėjo. Tai naudojama diagramoje darbalapyje.

Tai apima labai sudėtingą kodavimą, tačiau rezultatai yra įspūdingi. Galite sukurti gręžtuvus, pvz. naudotojas spustelėja skritulinės diagramos segmentą ir akimirksniu ši diagrama paslėpta, o vietoje jos pasirodo antra diagrama, kurioje rodoma pradinio segmento detalių skritulinė diagrama, arba galite pateikti lentelės duomenis, patvirtinančius tą skritulinės diagramos segmentą.

Taikymo įvykiai

Galite naudoti programos objektą VBA, kad išjungtumėte kodą pagal tam tikrą įvykį

VBA programavimas | Kodo generatorius jums tinka!

Taikymas. Laiku

Tai leidžia jums reguliariai išjungti kodo fragmentą tol, kol darbaknygė įkeliama į „Excel“. Galbūt norėsite automatiškai įrašyti savo darbaknygę į kitą aplanką kas 10 minučių arba palikti darbalapį paleisti per naktį, kad gautumėte naujausius duomenis iš išorinio šaltinio.

Šiame pavyzdyje į modulį įvedama papildoma rutina. Tai rodo pranešimų laukelį kas 5 minutes, nors tai gali būti ir kita koduota procedūra. Tuo pačiu metu jis iš naujo nustato laikmatį pagal dabartinį laiką ir dar 5 minutes.

Kiekvieną kartą, kai jis veikia, laikmatis atstatomas, kad būtų paleista ta pati papildoma rutina per dar 5 minutes.

1234 Antrasis „TestOnTime“ ()„MsgBox“ „Testing OnTime“Application.OnTime (Dabar () + TimeValue ("00:05:00")), "TestOnTime"Pabaiga Sub

Taikymas. Gerai

Ši funkcija leidžia jums sukurti savo sparčiuosius klavišus. Galite priversti bet kurį klavišų derinį pavadinti savo kūrinio papildoma rutina.

Šiame pavyzdyje raidė „a“ yra peradresuojama taip, kad vietoj „a“ įdėjimo į langelį būtų rodomas pranešimų laukelis. Šį kodą reikia įdėti į įterptą modulį.

123456 Antrasis testas „KeyPress“ ()Application.OnKey „a“, „TestKeyPress“Pabaiga SubAntrasis testas „KeyPress“ ()„MsgBox“ „Paspaudėte„ a ““Pabaiga Sub

Pirmiausia vykdote papildomą „TestKeyPress“. Tai reikia paleisti tik vieną kartą. Programoje „Excel“ nurodoma, kad kiekvieną kartą paspaudus raidę „a“ antrinė rutina bus vadinama „TestKeyPress“. Antrinėje „TestKeyPress“ tiesiog rodomas pranešimų langas, kuriame nurodoma, kad paspaudėte klavišą „a“. Žinoma, tai gali įkelti formą arba atlikti įvairius kitus dalykus.

Galite naudoti bet kurį klavišų derinį, kurį galite naudoti su funkcija „SendKeys“

Norėdami atšaukti šią funkciją, paleiskite teiginį „OnKey“ be parametro „Procedūra“.

123 Sub CancelOnKey ()Application.OnKey "a"Pabaiga Sub

Dabar viskas vėl normaliai.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave