Excel VBA notikumi

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.

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave