Excel VBA események

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.

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave