Folyamatosan történnek események, amikor a felhasználó megnyit egy Excel -munkafüzetet, és különféle műveleteket végez, például adatokat visz be a cellákba vagy mozog a lapok között
A Visual Basic Editoron belül (ALT+F11) már be vannak állítva az alrutinok, amelyek kirúghatnak, ha a felhasználó valamit pl. adatok bevitele egy cellába. Az alrutin nem tartalmaz semmilyen műveleti kódot, csupán egy „Sub” utasítást és egy „End Sub” utasítást, amelyek között nincs kód. Gyakorlatilag szunnyadnak, így semmi sem történik, amíg be nem ír egy kódot.
Íme egy példa a munkalap „Módosítás” eseményén alapulva:
VBA programozóként hozzáadhat kódot, hogy bizonyos dolgok történjenek, amikor a felhasználó meghatározott műveletet hajt végre. Ez lehetőséget ad arra, hogy irányítsa a felhasználót, és megakadályozza, hogy olyan lépéseket tegyen, amelyeket nem szeretne, és amelyek károsíthatják a munkafüzetet. Például szeretné, ha más néven mentenék el a munkafüzet saját példányát, hogy ne befolyásolják az eredetit, amelyet számos felhasználó használhat.
Ha bezárják a munkafüzetet, akkor automatikusan felkéri őket a módosítások mentésére. A munkafüzetnek azonban van „BeforeClose” eseménye, és megadhat kódot, hogy megakadályozza a munkafüzet bezárását és a „Mentés” esemény elindítását. Ezután hozzáadhat egy gombot a munkalaphoz, és ráhelyezheti a saját „Mentés” rutinját. A „Mentés” rutint is letilthatja az „BeforeSave” esemény használatával
Az események működésének megértése elengedhetetlen egy VBA programozó számára.
Események típusai
Munkafüzet Események - ezek az események annak alapján indulnak el, hogy a felhasználó mit csinál a munkafüzettel. Ide tartoznak a felhasználói műveletek, például a munkafüzet megnyitása, a munkafüzet bezárása, a munkafüzet mentése, a lap hozzáadása vagy törlése
Feladatlap események - ezeket az eseményeket a felhasználó aktiválja egy adott munkalapon. A munkafüzet minden munkalapjának egyedi kódmodulja van, amely különböző eseményeket tartalmaz kifejezetten az adott munkalaphoz (nem minden munkalaphoz). Ide tartoznak a felhasználói műveletek, például a cella tartalmának megváltoztatása, dupla kattintás a cellára vagy a jobb gombbal a cellára.
Aktív X vezérlőesemények - Az Active X vezérlők hozzáadhatók a munkalaphoz az Excel szalag "Fejlesztő" lapján található "Beszúrás" ikon segítségével. Ezek gyakran gombvezérlők, amelyek lehetővé teszik a felhasználó számára, hogy különböző műveleteket hajtson végre a kód ellenőrzése alatt, de lehetnek olyan objektumok is, mint a legördülő menü. Az Active X vezérlők használata a munkalap űrlapvezérlőivel szemben teljes lehetőséget biztosít a programozhatóságra. Az Active X vezérlők programozási szempontból sokkal rugalmasabbak, mint a munkalap űrlapvezérlői.
Például lehet két legördülő vezérlője a munkalapon. Azt szeretné, hogy a második legördülő menüben elérhető lista azon alapuljon, amit a felhasználó az első legördülő menüben választott. Az első legördülő menü „Módosítás” eseményével kódot hozhat létre, hogy elolvashassa, amit a felhasználó kiválasztott, majd frissítse a második legördülő menüt. A második legördülő menüt is kikapcsolhatja, amíg a felhasználó nem választott az első legördülő menüben
UserForm Események - Beszúrhat és kialakíthat egy professzionális megjelenésű űrlapot, amelyet előugró ablakként használhat. Az űrlapon elhelyezett összes vezérlőelem Active X -vezérlő, és ugyanazokkal az eseményekkel rendelkezik, mint az Active X -vezérlők, amelyeket elhelyezhet egy munkalapon
Chart események - Ezek az események csak egy diagramlaphoz kapcsolódnak, és nem a munkalap részeként megjelenő diagramhoz. Ezek az események magukban foglalják a diagram átméretezését vagy a diagram kiválasztását.
Alkalmazási események - Ezek az Application objektumot használják a VBA -ban. A példák lehetővé teszik a kód aktiválását egy bizonyos gomb megnyomásakor vagy egy bizonyos idő elérésekor. Programozhat egy olyan helyzetet, amikor a munkafüzet 24 órában nyitva marad, és az adatokat egy külső forrásból egy éjszaka alatt, előre meghatározott időpontban importálja.
A kódok eseményeken történő használatának veszélyei
Amikor kódot ír, hogy tegyen valamit, amikor a felhasználó bizonyos műveleteket hajt végre, szem előtt kell tartania, hogy a kód más eseményeket is kiválthat, amelyek a kódot folyamatos hurokba helyezhetik.
Tegyük fel például, hogy a „Módosítás” eseményt használja a munkalapon, hogy amikor a felhasználó értéket helyez a cellába, az adott cellán alapuló számítás közvetlenül a jobb oldali cellába kerül.
A probléma itt az, hogy a számított érték cellába helyezése egy másik „Change” eseményt vált ki, amely viszont egy újabb „Change” eseményt vált ki, és így tovább, amíg a kód el nem fogy a használható oszlopoktól, és fel nem dobja hibaüzenetet.
Az esemény kódjának írásakor alaposan meg kell gondolnia, hogy más események ne történjenek meg véletlenül
Események letiltása
Kód használatával letilthatja az eseményeket a probléma kiküszöbölésére. Amit meg kell tennie, be kell illesztenie a kódot az események letiltásához az eseménykód futása alatt, majd újra engedélyeznie kell az eseményeket a kód végén. Íme egy példa erre:
1234 | Sub DisableEvents ()Application.EnableEvents = HamisApplication.EnableEvents = IgazEnd Sub |
Ne feledje, hogy ez letiltja az összes eseményt közvetlenül az Excel alkalmazásban, így ez hatással lesz az Excel egyéb funkcióira is. Ha ezt bármilyen okból használja, győződjön meg arról, hogy az eseményeket később újra bekapcsolja.
A paraméterek fontossága az eseményekben
Az események általában olyan paraméterekkel rendelkeznek, amelyekkel többet tudhat meg arról, hogy a felhasználó mit csinál, és a cella elhelyezkedéséről.
Például a Munkalap módosítása esemény így néz ki:
1 | Privát almunkalap_csere (ByVal -cél tartományként) |
A tartományobjektum használatával megtudhatja, hogy a felhasználó milyen cella sor/oszlop koordinátákat tartalmaz.
1234 | Privát almunkalap_csere (ByVal -cél tartományként)MsgBox Target. OszlopMsgBox Target. SorEnd Sub |
Ha csak azt szeretné, hogy a kód egy bizonyos oszlopon vagy sorszámon működjön, akkor adjon hozzá egy feltételt, amely kilép az alprogramból, ha az oszlop nem a kötelező.
123 | Privát almunkalap_csere (ByVal -cél tartományként)Ha cél. 2. oszlop, majd lépjen ki a szubEnd Sub |
Ezzel elkerülhető, hogy a kód több eseményt indítson el, mivel csak akkor fog működni, ha a felhasználó megváltoztatta a 2. oszlop egyik celláját (B oszlop)
Példák a munkafüzetes eseményekre (nem kimerítő)
A munkafüzet eseményei a VBE Project Explorer „ThisWorkbook” objektuma alatt találhatók. A kódablak első legördülő menüjében ki kell választania a „Munkafüzet” lehetőséget, majd a második legördülő menüben az összes elérhető esemény megjelenik
Munkafüzet nyitott esemény
Ez az esemény aktiválódik, amikor a felhasználó megnyitja a munkafüzetet. Segítségével üdvözlő üzenetet küldhet a felhasználónak a felhasználónevének rögzítésével
123 | Privát almunkafüzet_nyitva ()MsgBox "Üdvözöljük" és Application.UserNameEnd Sub |
Ellenőrizheti felhasználónevét egy rejtett lapon található listán is, hogy lássa, jogosult -e a munkafüzet elérésére. Ha nem jogosult felhasználó, megjeleníthet egy üzenetet, és bezárhatja a munkafüzetet, hogy ne tudják használni.
Munkafüzet új lap esemény
Ez az esemény akkor aktiválódik, amikor a felhasználó új lapot ad hozzá a munkafüzethez
Ezt a kódot használhatja arra, hogy csak új lap hozzáadását engedélyezze magának, ahelyett, hogy különböző felhasználók hozzáadnák a lapokat, és összezavarnák a munkafüzetet
1234567 | Privát almunkafüzet_újlap (ByVal Sh mint objektum)Application.DisplayAlerts = HamisHa Application.UserName "Richard" AkkorSh.DeleteVége HaApplication.DisplayAlerts = IgazEnd Sub |
Ne feledje, hogy ki kell kapcsolnia a riasztásokat, mivel a lap törlésekor megjelenik egy felhasználói figyelmeztetés, amely lehetővé teszi a felhasználó számára, hogy megkerülje a kódot. Győződjön meg róla, hogy később bekapcsolja a riasztásokat!
Unod már a VBA kódpéldák keresését? Próbálja ki az AutoMacro -t!
Munkafüzet az esemény mentése előtt
Ez az esemény akkor aktiválódik, amikor a felhasználó rákattint a „Mentés” ikonra, de még mielőtt a „Mentés” ténylegesen megtörténne
Amint azt korábban leírtuk, érdemes megakadályozni, hogy a felhasználók az eredeti munkafüzetbe mentsék a módosításokat, és arra kényszeríthetik őket, hogy új verziót hozzanak létre a munkalap gombjával. Mindössze annyit kell tennie, hogy a „Mégse” paramétert True értékre módosítja, és a munkafüzet soha nem menthető a hagyományos módszerrel.
123 | Privát almunkafüzet_BeforeSave (ByVal SaveAsUI mint Boolean, Cancel as Boolean)Mégse = IgazEnd Sub |
Munkafüzet az esemény bezárása előtt
Ezzel az eseménnyel megakadályozhatja, hogy a felhasználók bezárják a munkafüzetet, és ismét kényszeríteni őket a kilépésre a munkalap gombjával. Ismét a „Mégse” paramétert állítja „Igaz” értékre. Az Excel ablak jobb felső sarkában lévő piros X már nem működik.
123 | Privát almunkafüzet_BeforeClose (Mégse logikai értékként)Mégse = IgazEnd Sub |
Példák a munkalap eseményeire (nem kimerítő)
A munkalap eseményei a VBE Project Explorer adott lapnév objektuma alatt találhatók. A kódablak első legördülő menüjében ki kell választania a „Munkalapot”, majd a második legördülő menüben az összes elérhető esemény megjelenik
Munkalap módosítási esemény
Ez az esemény akkor aktiválódik, ha a felhasználó módosít egy munkalapot, például új értéket ír be a cellába
Ezzel az eseménnyel további értékeket vagy megjegyzéseket tehet a megváltozott cella mellé, de amint azt korábban tárgyaltuk, nem szeretné elkezdeni az események körének elindítását.
12345 | Privát almunkalap_csere (ByVal -cél tartományként)Ha cél. 2. oszlop, majd lépjen ki a szubActiveSheet.Cells (Target.Row, Target.Column + 1). Érték = _ActiveSheet.Cells (Target.Row, Target.Column). Érték * 1.1End Sub |
Ebben a példában a kód csak akkor működik, ha az értéket beírta a B oszlopba (2. oszlop). Ha ez igaz, akkor 10% -ot ad hozzá a számhoz, és a következő elérhető cellába helyezi
Munkalap a dupla kattintás esemény előtt
Ez az esemény aktiválja a kódot, ha a felhasználó duplán kattint egy cellára. Ez rendkívül hasznos lehet olyan pénzügyi jelentéseknél, mint például a mérleg vagy az eredménykimutatás, ahol a vezetők valószínűleg megkérdőjelezik a számokat, különösen, ha az eredmény negatív!
Ezt használhatja egy lefúrási lehetőség biztosítására, így amikor a menedzser megkérdőjelez egy adott számot, mindössze annyit kell tennie, hogy duplán kattint a számra, és a bontás megjelenik a jelentés részeként.
Ez nagyon lenyűgöző a felhasználó szemszögéből, és menti, hogy folyton azt kérdezze: „miért olyan magas ez a szám?”
Írnia kell egy kódot, hogy megtudja a szám fejlécét / feltételeit (a Cél objektum tulajdonságai segítségével), majd szűrje le a táblázatos adatokat, majd másolja be őket a jelentésbe.
VBA programozás | A kódgenerátor működik az Ön számára!
Munkalap Esemény aktiválása
Ez az esemény akkor következik be, amikor a felhasználó egyik lapról a másikra lép. Az új lapra vonatkozik, amelyre a felhasználó áthelyezi.
Segítségével biztosítható, hogy az új munkalap teljesen kiszámításra kerüljön, mielőtt a felhasználó bármit elkezdene rajta. Használható arra is, hogy csak újra kiszámítsa az adott lapot a teljes munkafüzet újraszámítása nélkül. Ha a munkafüzet nagy és bonyolult képlettel rendelkezik, akkor egy lap újbóli kiszámítása sok időt takarít meg
123 | Privát almunkalap_Activate ()ActiveSheet. SzámításEnd Sub |
Aktív X vezérlőesemények (nem kimerítő)
Amint azt korábban tárgyaltuk, az Active X vezérlőket közvetlenül hozzáadhatja a munkalaphoz. Ezek lehetnek parancsgombok, legördülő listák és listamezők
Az Active X események a VBE Project Explorer adott lapnévobjektuma alatt (ahol hozzáadta a vezérlőt) találhatók. A kódablak első legördülő menüjében ki kell választania az Active X vezérlő nevét, majd a második legördülő menüben az összes elérhető esemény megjelenik
Parancsgomb Kattintson az eseményre
Ha egy parancsgombot elhelyezett egy táblázatban, akkor azt szeretné, ha valamilyen műveletet hajtana végre. Ezt úgy teheti meg, hogy kódot helyez a Click eseményre.
Könnyen elhelyezhet erre egy „Biztos üzenetet?” Üzenetet, hogy a kód futtatása előtt ellenőrizni lehessen
12345 | Privát alparancsButton1_Click ()Dim ButtonRet mint változatButtonRet = MsgBox ("Biztos benne, hogy ezt szeretné tenni?", VbQuestion Vagy vbYesNo)Ha a ButtonRet = vbNo, akkor lépjen ki a Sub menübőlEnd Sub |
Legördülő (kombinált doboz) változtatási esemény
Az Active X legördülő menüben van egy változási esemény, így ha egy felhasználó kiválaszt egy adott elemet a legördülő listából, akkor az esemény használatával rögzítheti a választását, majd kódot írhat a munkalap vagy a munkafüzet többi részének megfelelően.
123 | Privát al -ComboBox1_Change ()MsgBox "Ön választotta" & ComboBox1.TextEnd Sub |
VBA programozás | A kódgenerátor működik az Ön számára!
Jelölje be (jelölőnégyzet) Kattintson az Esemény elemre
Hozzáadhat egy jelölőnégyzetet vagy jelölőnégyzetet a munkalaphoz, hogy választási lehetőségeket biztosítson a felhasználó számára. A kattintási esemény segítségével megtekintheti, hogy a felhasználó változtatott -e ezen valamit. A visszaadott értékek igazak vagy hamisak, attól függően, hogy bejelölték -e vagy sem.
123 | Private Sub CheckBox1_Click ()MsgBox CheckBox1.ValueEnd Sub |
UserForm események (nem kimerítő)
Az Excel lehetővé teszi a saját űrlapok tervezését. Ezek nagyon hasznosak lehetnek felugró ablakként információgyűjtéshez, vagy több lehetőség megadásához a felhasználó számára. Az előzőekben leírtak szerint Active X vezérlőket használnak, és pontosan ugyanazokkal az eseményekkel rendelkeznek, bár az események nagymértékben függenek a vezérlés típusától.
Íme egy példa egy egyszerű űrlapra:
Amikor megjelenik, így néz ki a képernyőn
Az űrlap eseményeit használhatja például az alapértelmezett cégnév megadására az űrlap megnyitásakor, annak ellenőrzésére, hogy a beírt vállalatnév megegyezik-e a táblázatban szereplő névvel, és nincs-e rosszul írva, valamint kódot adhat a kattintáshoz eseményeket az „OK” és a „Mégse” gombokon
Az űrlap mögötti kód és események dupla kattintással megtekinthetők az űrlapon bárhol
Az első legördülő menü hozzáférést biztosít az űrlap összes vezérlőjéhez. A második legördülő menü hozzáférést biztosít az eseményekhez
UserForm Esemény aktiválása
Ez az esemény akkor aktiválódik, amikor az űrlap aktiválva van, általában akkor, ha megjelenik. Ezzel az eseménnyel lehet alapértelmezett értékeket beállítani pl. alapértelmezett cégnév a cégnév szövegmezőben
123 | Privát alfelhasználóForm_Activate ()TextBox1.Text = "Saját cég neve"End Sub |
VBA programozás | A kódgenerátor működik az Ön számára!
Esemény módosítása
Az űrlap vezérlőinek többségében van változási esemény, de ebben a példában a cégnév szövegmező az esemény segítségével korlátozhatja a beírt cégnév hosszát
123456 | Privát alszövegBox1_Change ()Ha Len (TextBox1.Text)> 20 AkkorMsgBox "A név legfeljebb 20 karakter hosszúságú", vbCriticalTextBox1.Text = ""Vége HaEnd Sub |
Kattintson az Esemény elemre
Az esemény segítségével lépéseket tehet attól, hogy a felhasználó rákattint az űrlap vezérlőelemeire, vagy akár magára az űrlapra
Ezen az űrlapon található az „OK” gomb, és miután összegyűjtöttük a cég nevét, azt a táblázat egyik cellájába szeretnénk helyezni későbbi hivatkozás céljából
1234 | Privát alparancsButton1_Click ()ActiveSheet.Range ("A1"). Érték = TextBox1.TextÉn.Bújj elEnd Sub |
Ez a kód akkor működik, ha a felhasználó rákattint az „OK” gombra. A cégnév -beviteli mezőben lévő értéket az aktív lap A1 cellájába helyezi, majd elrejti az űrlapot, hogy a felhasználói vezérlés visszakerüljön a munkalapra.
Chart események
A diagramesemények csak azokon a diagramokon működnek, amelyek külön diagramlapon vannak, és nem egy szabványos munkalapba beépített diagramon
A diagram eseményei némileg korlátozottak, és nem használhatók olyan munkalapon, ahol előfordulhat, hogy több diagramja is van. Továbbá a felhasználók nem feltétlenül akarnak számokat tartalmazó munkalapról diagramlapra váltani - itt nincs azonnali vizuális hatás
A leghasznosabb esemény az lenne, ha megtudnánk a diagram azon összetevőjét, amelyre a felhasználó rákattintott pl. szegmens a kördiagramon, vagy egy oszlop a sávdiagramon, de ez nem egy esemény, amely a szabványos eseménykörben érhető el.
Ez a probléma megoldható úgy, hogy egy osztálymodul segítségével hozzáad egy „Egér lefelé” eseményt, amely a felhasználó által rákattintott diagramösszetevő adatait adja vissza. Ezt egy munkalapon lévő diagramon használják.
Ez magában foglal egy nagyon bonyolult kódolást, de az eredmények látványosak. Létrehozhat fúrásokat pl. a felhasználó rákattint a kördiagram -szegmensre, és a diagram azonnal elrejtődik, és megjelenik egy másik diagram a helyén, amely az eredeti szegmens részletes kördiagramját mutatja, vagy elkészítheti a kördiagram ezen szegmensét alátámasztó táblázatos adatokat.
Alkalmazási események
A VBA alkalmazásobjektumával egy adott eseménynek megfelelően aktiválhatja a kódot
VBA programozás | A kódgenerátor működik az Ön számára!
Alkalmazás. Egy időben
Ez lehetővé teszi, hogy rendszeres időközönként kilövjön egy kódrészletet mindaddig, amíg a munkafüzet be van töltve az Excelbe. Előfordulhat, hogy 10 percenként automatikusan el szeretné menteni a munkafüzetet egy másik mappába, vagy hagyja futni a munkalapot egyik napról a másikra, hogy behozza a legfrissebb adatokat egy külső forrásból.
Ebben a példában egy alrutin kerül be a modulba. 5 percenként megjelenít egy üzenetdobozt, bár ez könnyen lehet egy másik kódolt eljárás. Ugyanakkor visszaállítja az időzítőt az aktuális időre és további 5 percre.
Minden alkalommal, amikor fut, az időzítő újraindul, hogy ugyanazt az alrutinot futtassa további 5 perc múlva.
1234 | Sub TestOnTime ()MsgBox "OnTime tesztelése"Application.OnTime (Most () + TimeValue ("00:05:00")), "TestOnTime"End Sub |
Application.OnKey
Ez a funkció lehetővé teszi saját gyorsbillentyűk tervezését. Bármely billentyűkombinációt létrehozhat az alkotás alrutinjaként.
Ebben a példában az „a” betű átirányításra kerül, így ahelyett, hogy az „a” betűt cellába helyezné, egy üzenetdobozt jelenít meg. Ezt a kódot egy behelyezett modulba kell helyezni.
123456 | Sub TestKeyPress ()Application.OnKey "a", "TestKeyPress"End SubSub TestKeyPress ()MsgBox "Megnyomta az" a "gombotEnd Sub |
Először is futtassa a „TestKeyPress” alrutinot. Ezt csak egyszer kell futtatnia. Azt mondja az Excelnek, hogy minden alkalommal, amikor az „a” betűt megnyomja, az alrutin „TestKeyPress” nevet kap. Az alrutin „TestKeyPress” csak egy üzenetdobozt jelenít meg, amely jelzi, hogy megnyomta az „a” gombot. Ez természetesen betölthet egy űrlapot, vagy minden egyéb dolgot elvégezhet.
Bármilyen billentyűkombinációt használhat, amelyet a „SendKeys” funkcióval használhat
Ennek a funkciónak a kikapcsolásához futtassa az „OnKey” utasítást az „eljárás” paraméter nélkül.
123 | Sub CancelOnKey ()Application.OnKey "a"End Sub |
Most minden visszaállt a normális kerékvágásba.