Notikumi notiek visu laiku, kad lietotājs atver Excel darbgrāmatu un sāk veikt dažādas darbības, piemēram, ievadīt datus šūnās vai pārvietoties starp lapām
Visual Basic redaktora (ALT+F11) ietvaros jau ir iestatītas apakšrutīnas, kuras var atlaist, kad lietotājs kaut ko dara, piem. ievadot datus šūnā. Apakšrutīna nenodrošina nekādu darbības kodu, tikai paziņojumu “apakš” un “beigu apakšrakstu” bez koda starp tiem. Tie ir faktiski neaktīvi, tāpēc nekas nenotiek, kamēr neesat ievadījis kādu kodu.
Šeit ir piemērs, kura pamatā ir notikums “Mainīt” darblapā:
Kā VBA programmētājs jūs varat pievienot kodu, lai noteiktas lietas notiktu, kad lietotājs veic noteiktu darbību. Tas dod jums iespēju kontrolēt lietotāju un neļaut viņam veikt darbības, kuras nevēlaties, lai viņš darītu un kas varētu sabojāt jūsu darbgrāmatu. Piemēram, jūs varētu vēlēties, lai viņi saglabā savu individuālo darbgrāmatas kopiju ar citu nosaukumu, lai tie neietekmētu oriģinālu, ko, iespējams, izmanto vairāki lietotāji.
Ja viņi aizver darbgrāmatu, viņiem automātiski tiks piedāvāts saglabāt izmaiņas. Tomēr darbgrāmatā ir notikums “BeforeClose”, un jūs varat ievadīt kodu, lai novērstu darbgrāmatas aizvēršanu un notikuma “Saglabāt” aktivizēšanu. Pēc tam varat pievienot pogu darblapai un ievietot tajā savu “Saglabāt” rutīnu. Varat arī atspējot rutīnu “Saglabāt”, izmantojot notikumu “BeforeSave”
Izpratne par notikumu darbību ir absolūti nepieciešama VBA programmētājam.
Notikumu veidi
Darba burtnīca Notikumi - šie notikumi tiek izslēgti, pamatojoties uz to, ko lietotājs dara ar pašu darbgrāmatu. Tie ietver lietotāja darbības, piemēram, darbgrāmatas atvēršanu, darbgrāmatas aizvēršanu, darbgrāmatas saglabāšanu, lapas pievienošanu vai dzēšanu
Darblapas notikumi - šos notikumus aktivizē lietotājs, veicot darbības noteiktā darblapā. Katrai darbgrāmatas darblapai ir individuāls koda modulis, kas satur dažādus notikumus, kas īpaši paredzēti šai darblapai (ne visām darblapām). Tie ietver lietotāja darbības, piemēram, šūnas satura maiņu, dubultklikšķi uz šūnas vai peles labo pogu noklikšķinot uz šūnas.
Aktīvie X kontroles notikumi - Active X vadīklas var pievienot darblapai, izmantojot Excel lentes cilnes Izstrādātājs ikonu Ievietot. Tās bieži ir pogu vadīklas, lai lietotājs varētu veikt dažādas darbības, kontrolējot jūsu kodu, taču tās var būt arī tādi objekti kā nolaižamās izvēlnes. Izmantojot Active X vadīklas, nevis veidlapas vadīklas darblapā, tiek nodrošināta visa programmējamības iespēja. Active X vadīklas sniedz daudz lielāku elastību no programmēšanas viedokļa, nekā izmantojot veidlapas vadīklas darblapā.
Piemēram, jūsu darblapā var būt divas nolaižamās vadīklas. Jūs vēlaties, lai otrajā nolaižamajā sarakstā pieejamais saraksts būtu balstīts uz to, ko lietotājs izvēlējās pirmajā nolaižamajā izvēlnē. Izmantojot notikumu “Mainīt” pirmajā nolaižamajā izvēlnē, varat izveidot kodu, lai izlasītu lietotāja atlasīto, un pēc tam atjaunināt otro nolaižamo izvēlni. Varat arī deaktivizēt otro nolaižamo izvēlni, līdz lietotājs ir izdarījis izvēli pirmajā nolaižamajā izvēlnē
UserForm notikumi - Jūs varat ievietot un noformēt profesionāla izskata veidlapu, ko izmantot kā uznirstošo logu. Visas vadīklas, kuras ievietojat veidlapā, ir Active X vadīklas, un tām ir tādi paši notikumi kā Active X vadīklām, kuras varat ievietot darblapā
Diagrammas notikumi - Šie notikumi ir saistīti tikai ar diagrammas lapu, nevis ar diagrammu, kas parādās kā darblapas daļa. Šie notikumi ietver diagrammas lieluma maiņu vai diagrammas izvēli.
Pieteikšanās notikumi - Tie izmanto lietojumprogrammas objektu VBA. Piemēri ļautu kodu izslēgt, nospiežot noteiktu taustiņu vai sasniedzot noteiktu laiku. Jūs varētu ieprogrammēt situāciju, kad darbgrāmata tiek atstāta atvērta visu diennakti un tā importē datus no ārēja avota nakti iepriekš noteiktā laikā.
Koda izmantošanas bīstamība pasākumos
Rakstot kodu, lai kaut ko darītu, kad lietotājs veic noteiktu darbību, jums jāpatur prātā, ka jūsu kods var izraisīt citus notikumus, kas var novest jūsu kodu nepārtrauktā ciklā.
Piemēram, pieņemsim, ka darblapā izmantojat notikumu “Mainīt”, lai, kad lietotājs šūnā ievietotu vērtību, aprēķins, kas balstīts uz šo šūnu, tiktu ievietots šūnā pa labi no tās.
Problēma ir tāda, ka aprēķinātās vērtības ievietošana šūnā izraisa citu notikumu “Mainīt”, kas savukārt izraisa vēl vienu notikumu “Mainīt” un tā tālāk, līdz jūsu kodam ir beidzies izmantojamo kolonnu skaits un tiek izmests kļūdas ziņojums.
Rakstot notikuma kodu, jums rūpīgi jādomā, lai nodrošinātu, ka citi notikumi netiks nejauši aktivizēti
Atspējot notikumus
Lai novērstu šo problēmu, varat izmantot kodu, lai atspējotu notikumus. Jums būs jāiekļauj kods, lai atspējotu notikumus, kamēr darbojas jūsu notikuma kods, un pēc tam atkārtoti iespējojiet notikumus koda beigās. Šeit ir piemērs, kā to izdarīt:
1234 | Sub DisableEvents ()Application.EnableEvents = NepareiziApplication.EnableEvents = PatiessBeigu apakš |
Paturiet prātā, ka tas atspējo visus notikumus tieši lietojumprogrammā Excel, tāpēc tas ietekmēs arī citas Excel funkcijas. Ja to izmantojat kāda iemesla dēļ, pārliecinieties, ka pēc tam notikumi tiek atkal ieslēgti.
Parametru nozīme notikumos
Pasākumiem parasti ir parametri, kurus varat izmantot, lai uzzinātu vairāk par lietotāja darbību un šūnas atrašanās vietu.
Piemēram, darblapas maiņas notikums izskatās šādi:
1 | Privāta apakšdarblapas maiņa (ByVal mērķis kā diapazons) |
Izmantojot diapazona objektu, jūs varat uzzināt šūnu rindu/kolonnu koordinātas, kurās lietotājs faktiski atrodas.
1234 | Privāta apakšdarblapas maiņa (ByVal mērķis kā diapazons)MsgBox mērķis. KolonnaMsgBox mērķis. RindaBeigu apakš |
Ja vēlaties, lai kods darbotos tikai ar noteiktu kolonnas vai rindas numuru, tad pievienojiet nosacījumu, kas iziet no apakšprogrammas, ja kolonna nav obligātā.
123 | Privāta apakšdarblapas maiņa (ByVal mērķis kā diapazons)Ja mērķauditorija. 2. sleja, tad izejiet no apakšBeigu apakš |
Tādējādi tiek novērsta problēma, ka jūsu kods izraisa vairākus notikumus, jo tas darbosies tikai tad, ja lietotājs būs mainījis šūnu 2. slejā (B sleja)
Darbgrāmatas notikumu piemēri (nav izsmeļoši)
Darbgrāmatas notikumi ir atrodami zem objekta “ThisWorkbook” VBE Project Explorer. Koda loga pirmajā nolaižamajā izvēlnē jums būs jāizvēlas “Darbgrāmata”, un pēc tam otrajā nolaižamajā izvēlnē tiks parādīti visi pieejamie notikumi
Darbgrāmatas atklāšana
Šis notikums tiek aktivizēts ikreiz, kad lietotājs atver darbgrāmatu. Varat to izmantot, lai lietotājam nosūtītu sveiciena ziņojumu, ierakstot viņa lietotājvārdu
123 | Privāta apakšdarbgrāmata_atvērt ()MsgBox "Laipni lūdzam" un Application.UserNameBeigu apakš |
Varat arī pārbaudīt viņu lietotājvārdu no saraksta, kas atrodas slēptā lapā, lai redzētu, vai viņiem ir atļauts piekļūt darbgrāmatai. Ja viņi nav autorizēti lietotāji, varat parādīt ziņojumu un aizvērt darbgrāmatu, lai viņi to nevarētu izmantot.
Darbgrāmatas jaunās lapas notikums
Šis notikums tiek aktivizēts, kad lietotājs pievieno jaunu lapu darbgrāmatai
Jūs varētu izmantot šo kodu, lai atļautu tikai jaunas lapas pievienošanu, nevis lai dažādi lietotāji pievienotu lapas un padarītu nesakārtotu darbgrāmatu
1234567 | Privāta apakšdarbgrāmata_Jauna lapa (ByVal Sh kā objekts)Application.DisplayAlerts = NepareiziJa Application.UserName "Richard" TadSh.DeleteBeigas JaApplication.DisplayAlerts = PatiessBeigu apakš |
Ņemiet vērā, ka jums ir jāizslēdz brīdinājumi, jo, izdzēšot lapu, parādīsies lietotāja brīdinājums, kas ļauj lietotājam apiet jūsu kodu. Pārliecinieties, ka pēc tam atkal ieslēdzat brīdinājumus!
Vai esat noguris no VBA koda piemēru meklēšanas? Izmēģiniet AutoMacro!
Darbgrāmata pirms notikuma saglabāšanas
Šis notikums tiek aktivizēts, kad lietotājs noklikšķina uz ikonas “Saglabāt”, bet vēl pirms “Saglabāt”
Kā aprakstīts iepriekš, iespējams, vēlēsities liegt lietotājiem saglabāt izmaiņas sākotnējā darbgrāmatā un piespiest viņus izveidot jaunu versiju, izmantojot darblapas pogu. Viss, kas jums jādara, ir mainīt parametru “Atcelt” uz “True”, un darbgrāmatu nekad nevar saglabāt ar parasto metodi.
123 | Privāta apakšdarbgrāmata_BeforeSave (ByVal SaveAsUI kā Būla, Atcelt kā Būla)Atcelt = taisnībaBeigu apakš |
Darba grāmata pirms noslēguma pasākuma
Varat izmantot šo notikumu, lai neļautu lietotājiem slēgt darbgrāmatu un atkal piespiest viņus iziet, izmantojot darblapas pogu. Atkal iestatiet parametru “Atcelt” uz “True”. Sarkanais X Excel loga augšējā labajā stūrī vairs nedarbojas.
123 | Privāta apakšdarbgrāmata_BeforeClose (Atcelt kā Būla)Atcelt = taisnībaBeigu apakš |
Darblapas notikumu piemēri (nav izsmeļoši)
Darblapas notikumi ir atrodami zem konkrētā lapas nosaukuma objekta VBE Project Explorer. Koda loga pirmajā nolaižamajā izvēlnē jums jāizvēlas “Darblapa”, un pēc tam otrajā nolaižamajā izvēlnē tiks parādīti visi pieejamie notikumi
Darblapas maiņas notikums
Šis notikums tiek aktivizēts, kad lietotājs veic izmaiņas darblapā, piemēram, šūnā ievada jaunu vērtību
Varat izmantot šo notikumu, lai blakus mainītajai šūnai ievietotu papildu vērtību vai komentāru, taču, kā minēts iepriekš, jūs nevēlaties sākt notikumu cikla ieslēgšanu.
12345 | Privāta apakšdarblapas maiņa (ByVal mērķis kā diapazons)Ja mērķauditorija. 2. sleja, tad izejiet no apakšActiveSheet.Cells (Target.Row, Target.Column + 1). Vērtība = _ActiveSheet.Cells (Target.Row, Target.Column). Vērtība * 1.1Beigu apakš |
Šajā piemērā kods darbosies tikai tad, ja vērtība tiks ievadīta B slejā (2. sleja). Ja tā ir taisnība, tas skaitlim pievienos 10% un ievietos to nākamajā pieejamajā šūnā
Darba lapa pirms dubultklikšķa notikuma
Šis notikums aktivizēs kodu, ja lietotājs divreiz noklikšķinās uz šūnas. Tas var būt ārkārtīgi noderīgi finanšu pārskatos, piemēram, bilancē vai peļņas un zaudējumu pārskatā, kur vadītāji, visticamāk, apstrīdēs skaitļus, it īpaši, ja rezultāts ir negatīvs!
Varat to izmantot, lai nodrošinātu detalizētu informāciju, lai, kad vadītājs apstrīd konkrētu numuru, viss, kas viņiem jādara, ir divreiz noklikšķināt uz numura, un sadalījums tiek parādīts kā daļa no pārskata.
No lietotāja viedokļa tas ir ļoti iespaidīgi un ļauj viņiem pastāvīgi jautāt: “Kāpēc šis skaitlis ir tik liels?”
Jums būs jāraksta kods, lai uzzinātu numura virsrakstu / kritērijus (izmantojot mērķa objekta rekvizītus), un pēc tam filtrējiet tabulas datus un pēc tam kopējiet tos pārskatā.
VBA programmēšana | Kodu ģenerators strādā jūsu labā!
Darba lapa Aktivizēt notikumu
Šis notikums rodas, kad lietotājs pāriet no vienas lapas uz citu. Tas attiecas uz jauno lapu, uz kuru lietotājs pārvietojas.
To varētu izmantot, lai nodrošinātu, ka jaunā lapa ir pilnībā aprēķināta, pirms lietotājs sāk kaut ko darīt. To var izmantot arī, lai tikai pārrēķinātu konkrēto lapu, nepārrēķinot visu darbgrāmatu. Ja darbgrāmata ir liela un tajā ir sarežģīta formula, tad vienas lapas atkārtota aprēķināšana ietaupa daudz laika
123 | Privāta apakšdarblapa_Aktivizēt ()ActiveSheet. AprēķinātBeigu apakš |
Aktīvie X vadības notikumi (nav izsmeļoši)
Kā minēts iepriekš, Active X vadīklas varat pievienot tieši darblapai. Tās var būt komandu pogas, nolaižamās izvēlnes un sarakstu lodziņi
Active X notikumi ir atrodami zem konkrētā lapas nosaukuma objekta (kur pievienojāt vadīklu) VBE Project Explorer. Koda loga pirmajā nolaižamajā izvēlnē jums būs jāizvēlas Active X vadīklas nosaukums, un pēc tam otrajā nolaižamajā izvēlnē tiks parādīti visi pieejamie notikumi
Komandas poga Noklikšķiniet uz notikuma
Kad esat ievietojis komandu pogu izklājlapā, vēlaties, lai tā veiktu dažas darbības. Lai to izdarītu, klikšķa notikumam ievietojiet kodu.
Jūs varat viegli ievietot ziņojumu “Vai esat pārliecināts?”, Lai pirms koda izpildes tiktu veikta pārbaude
12345 | Privāta apakškomandaButton1_Click ()Dim ButtonRet kā variantsButtonRet = MsgBox ("Vai esat pārliecināts, ka vēlaties to darīt?", VbQuestion Or vbYesNo)Ja ButtonRet = vbNē, tad izejiet no apakšBeigu apakš |
Nolaižamā (kombinētā lodziņa) mainīšanas notikums
Active X nolaižamajā izvēlnē ir izmaiņu notikums, lai, ja lietotājs nolaižamajā sarakstā atlasītu konkrētu vienumu, jūs varētu uzņemt savu izvēli, izmantojot šo notikumu, un pēc tam uzrakstīt kodu, lai attiecīgi pielāgotu citas lapas vai darbgrāmatas daļas.
123 | Privāta apakškombinācija1_Change ()MsgBox "Jūs izvēlējāties" & ComboBox1.TextBeigu apakš |
VBA programmēšana | Kodu ģenerators strādā jūsu labā!
Atzīmējiet izvēles rūtiņu (izvēles rūtiņu) Noklikšķiniet uz Notikums
Darblapai varat pievienot atzīmi vai izvēles rūtiņu, lai lietotājam sniegtu iespēju izvēlēties. Jūs varat izmantot klikšķa notikumu, lai redzētu, vai lietotājs šajā sakarā ir kaut ko mainījis. Atgrieztās vērtības ir patiesas vai nepatiesas atkarībā no tā, vai tās ir atzīmētas.
123 | Privāta apakšpārbaudeBox1_Click ()MsgBox CheckBox1.ValueBeigu apakš |
UserForm notikumi (nav izsmeļoši)
Programma Excel nodrošina iespēju veidot savas veidlapas. Tie var būt ļoti noderīgi, lai tos izmantotu kā uznirstošos logus, lai apkopotu informāciju vai sniegtu lietotājam vairākas izvēles. Viņi izmanto Active X vadīklas, kā aprakstīts iepriekš, un tiem ir tieši tādi paši notikumi, lai gan notikumi ir ļoti atkarīgi no vadības veida.
Šeit ir vienkāršas formas piemērs:
Kad tas tiek parādīts, tas izskatās ekrānā
Jūs veidlapā izmantotu notikumus, lai, piemēram, ievadītu noklusējuma uzņēmuma nosaukumu, kad veidlapa tiek atvērta, lai pārbaudītu, vai uzņēmuma nosaukuma ievade piekrīt tam, kas jau ir izklājlapā un vai tā nav uzrakstīta nepareizi, un lai klikšķim pievienotu kodu notikumus, nospiežot pogas “Labi” un “Atcelt”
Veidlapas kodu un notikumus var apskatīt, veicot dubultklikšķi uz jebkuras formas vietas
Pirmā nolaižamā izvēlne nodrošina piekļuvi visām veidlapas vadīklām. Otrā nolaižamā izvēlne ļaus piekļūt notikumiem
UserForm aktivizēšanas notikums
Šis notikums tiek aktivizēts, kad veidlapa ir aktivizēta, parasti, kad tā tiek parādīta. Šo notikumu var izmantot, lai iestatītu noklusējuma vērtības, piem. uzņēmuma nosaukuma tekstlodziņā noklusējuma uzņēmuma nosaukums
123 | Privāts apakšlietotājsForm_Activate ()TextBox1.Text = "Mans uzņēmuma nosaukums"Beigu apakš |
VBA programmēšana | Kodu ģenerators strādā jūsu labā!
Mainīt notikumu
Lielākajai daļai veidlapas vadīklu ir izmaiņu notikums, taču šajā piemērā uzņēmuma nosaukuma tekstlodziņā var izmantot notikumu, lai ierobežotu ievadāmā uzņēmuma nosaukuma garumu
123456 | Privāta apakšteksta kaste1_Change ()Ja Len (TextBox1.Text)> 20 TadMsgBox "Nosaukums ir ierobežots līdz 20 rakstzīmēm", vbCriticalTextBox1.Text = ""Beigas JaBeigu apakš |
Noklikšķiniet uz Notikums
Šo notikumu varat izmantot, lai lietotājs rīkotos, noklikšķinot uz veidlapas vadīklas vai pat uz pašas veidlapas
Šajā veidlapā ir poga “Labi”, un, apkopojot uzņēmuma nosaukumu, mēs vēlētos to ievietot izklājlapas šūnā turpmākai uzziņai
1234 | Privāta apakškomandaButton1_Click ()ActiveSheet.Range ("A1"). Vērtība = TextBox1.TextEs.SlēptBeigu apakš |
Šis kods darbojas, kad lietotājs noklikšķina uz pogas “Labi”. Tas ievieto uzņēmuma nosaukuma ievades lodziņa vērtību aktīvās lapas šūnā A1 un pēc tam slēpj formu, lai lietotāja vadība tiktu atgriezta darblapā.
Diagrammas notikumi
Diagrammas notikumi darbojas tikai diagrammās, kas atrodas atsevišķā diagrammas lapā, nevis diagrammā, kas ir iekļauta standarta darblapā
Diagrammas notikumi ir nedaudz ierobežoti, un tos nevar izmantot darblapā, kur jums varētu būt vairākas diagrammas. Tāpat lietotāji ne vienmēr vēlas pāriet no darblapas, kurā ir skaitļi, uz diagrammas lapu - šeit nav tūlītējas vizuālas ietekmes
Visnoderīgākais notikums būtu noskaidrot diagrammas sastāvdaļu, uz kuras lietotājs ir noklikšķinājis, piem. segmentu sektoru diagrammā vai joslu joslu diagrammā, taču tas nav notikums, kas pieejams standarta notikumu diapazonā.
Šo problēmu var atrisināt, izmantojot klases moduli, lai pievienotu notikumu “Pele uz leju”, kas parādīs informāciju par diagrammas komponentu, uz kura lietotājs ir noklikšķinājis. To izmanto diagrammā darblapā.
Tas ietver ļoti sarežģītu kodēšanu, bet rezultāti ir iespaidīgi. Jūs varat izveidot urbumus, piemēram, lietotājs noklikšķina uz sektoru diagrammas segmenta un uzreiz šī diagramma tiek paslēpta, un tās vietā tiek parādīta otra diagramma, kurā parādīta sākotnējā segmenta detalizēta sektoru diagramma, vai arī jūs varat izveidot tabulas datus, kas atbalsta šo sektoru diagrammas segmentu.
Pieteikšanās notikumi
Varat izmantot lietojumprogrammas objektu VBA, lai aktivizētu kodu atbilstoši konkrētam notikumam
VBA programmēšana | Kodu ģenerators strādā jūsu labā!
Pieteikums. Vienreizējs
Tas var ļaut jums regulāri aktivizēt koda gabalu, kamēr darbgrāmata ir ielādēta programmā Excel. Iespējams, vēlēsities automātiski saglabāt savu darbgrāmatu citā mapē ik pēc 10 minūtēm vai atstāt darblapu darboties visu nakti, lai iegūtu jaunākos datus no ārēja avota.
Šajā piemērā modulī tiek ievadīta apakšrutīna. Tas ik pēc 5 minūtēm parāda ziņojumu lodziņu, lai gan tā varētu būt vēl viena kodēta procedūra. Tajā pašā laikā taimeris tiek atiestatīts uz pašreizējo laiku un vēl 5 minūtes.
Katru reizi, kad tas darbojas, taimeris tiek atiestatīts, lai palaistu to pašu apakšprogrammu vēl 5 minūšu laikā.
1234 | Sub TestOnTime ()MsgBox "Testēšana OnTime"Application.OnTime (tagad () + TimeValue ("00:05:00")), "TestOnTime"Beigu apakš |
Lietojumprogramma. Ieslēgts
Šī funkcija ļauj jums izveidot savus karstos taustiņus. Jebkuru taustiņu kombināciju var izsaukt par jūsu radīšanas apakšprogrammu.
Šajā piemērā burts “a” tiek novirzīts tā, ka tā vietā, lai šūnā ievietotu “a”, tas parādītu ziņojumu lodziņu. Šis kods jāievieto ievietotajā modulī.
123456 | Apakšpārbaude KeyPress ()Application.OnKey "a", "TestKeyPress"Beigu apakšApakšpārbaude KeyPress ()MsgBox "Jūs nospiedāt" a ""Beigu apakš |
Vispirms jūs palaižat apakšprogrammu “TestKeyPress”. Jums tas jādarbina tikai vienu reizi. Tajā teikts programmai Excel, ka katru reizi, kad tiek nospiests burts “a”, tas tiks saukts par “TestKeyPress”. Apakšprogrammā “TestKeyPress” tiek parādīts tikai ziņojumu lodziņš, kas norāda, ka esat nospiedis taustiņu “a”. Tas, protams, varētu ielādēt veidlapu vai darīt visādas citas lietas.
Jūs varat izmantot jebkuru taustiņu kombināciju, ko varat izmantot ar funkciju “SendKeys”
Lai atceltu šo funkcionalitāti, palaidiet paziņojumu “OnKey” bez parametra “Procedūra”.
123 | Sub CancelOnKey ()Application.OnKey "a"Beigu apakš |
Tagad viss ir normalizējies.