Excel VBA makrók szerkesztése

Excel VBA makrók használata

Az Excel makrói VBA -kódként vannak tárolva, és néha ezt a kódot közvetlenül is szerkeszteni kell. Ez az oktatóanyag a makrók megtekintésére és szerkesztésére, a makró hibakeresési technikáinak leírására és néhány gyakori szerkesztési példára vonatkozik.

Makró megtekintése

A makrók listája megjeleníthető a Makrók párbeszédpanelen. Ennek a párbeszédablaknak a megtekintéséhez válassza ki a Fejlesztő fület a szalagon, majd kattintson a Makrók gombra.

Ha több munkafüzet van nyitva, az összes munkafüzet makrói megjelennek a listában. Az aktív munkafüzet makrói csak név szerint jelennek meg, míg a többi munkafüzet makróit a munkafüzet neve és egy felkiáltójel (pl. „Könyv2! EgyébMakró”) jelzi.

Nyisson meg egy makrót a szerkesztéshez

A Makró párbeszédpanelen megnyithatja a makró kódját a makró nevének kiválasztásával és a Szerkesztés gombra kattintva. Ez megnyitja a makrót a VB szerkesztőben.

Alternatív megoldásként megnyithatja a VB szerkesztőt közvetlenül a Fejlesztő fül Visual Basic gombjára kattintva, vagy az ALT+F11 billentyűparancs megnyomásával.

Ezzel a módszerrel navigálnia kell a kívánt makróhoz (más néven „eljárás”). Megnézzük a VBA szerkesztő elrendezését:

A VB szerkesztő áttekintése

A VB szerkesztőnek több ablaka van; ebben az oktatóanyagban lefedjük a projektablakot, a tulajdonságok ablakot és a kódablakot.

Projekt ablak

A Projekt ablak minden Excel fájlt saját projektként jelenít meg, a projekt összes objektumát típus szerint kategorizálva. A rögzített makrók a „Modulok” kategóriában jelennek meg, általában a „Modul1” objektumban. (Ha a projekt több modulból áll, és nem tudja, hol tárolja a makrót, egyszerűen nyissa meg a fent említett Makrók párbeszédpanelen.)

Tulajdonságok ablak

A Tulajdonságok ablak megjeleníti az objektum tulajdonságait és a hozzájuk tartozó értékeket - például ha egy projektlapra kattint egy munkalap objektumra, megjelenik a munkalap tulajdonságainak listája. Az ingatlannevek a bal oldalon, a tulajdonságok pedig a jobb oldalon találhatók.

Ha kiválaszt egy modult a Projekt ablakban, akkor az csak egy tulajdonsággal rendelkezik: „(Név)”. A modul nevének megváltoztatásához kattintson duplán a tulajdonság értékére, írjon be egy új nevet és nyomja meg az Enter billentyűt. A modul nevének megváltoztatása a projektablakban átnevezi azt, ami akkor hasznos, ha sok modulja van.

Kódablakok

A kódablakok speciális szövegszerkesztők, amelyekben szerkesztheti a makró VBA -kódját. Ha látni szeretné a 1. modulban található makró kódját, kattintson duplán a „Modul1” elemre a projektablakban.

Makrók futtatása a VB szerkesztőben

A makrók közvetlenül a VB szerkesztőből futtathatók, ami hasznos a teszteléshez és a hibakereséshez.

Makró futtatása

  • A Projekt ablakban kattintson duplán a tesztelni kívánt makrót tartalmazó modulra (annak kódablakának megnyitásához)
  • A Kód ablakban helyezze a kurzort a makró kódján a „Sub” és „End Sub” közé.
  • Kattints a Fuss gombot az eszköztáron, vagy nyomja meg az F5 billentyűparancsot

Makró „lépésről lépésre”

Ahelyett, hogy egyszerre futtatná a makrót, futtathatja a makrót egy sorban, egy billentyűparanccsal a kód „átlépéséhez”. A makró minden sorban szünetel, így biztosíthatja, hogy minden kódsor megfeleljen az Excelben vártnak. Ezzel a módszerrel bármikor leállíthatja a makró folytatását.

A makró „átlépéséhez”:

  • A Projekt ablakban kattintson duplán a tesztelni kívánt makrót tartalmazó modulra (annak kódablakának megnyitásához)
  • A Kód ablakban vigye a kurzort a makró kódjának tetszőleges pontjára
  • Nyomja meg az F8 billentyűparancsot az „átmeneti” folyamat elindításához
  • Nyomja meg többször az F8 billentyűt a kód végrehajtásának előrehaladásához, amelyet a Kód ablak sárga kiemelése jelez
  • A makró folytatásának leállításához nyomja meg a gombot Visszaállítás gomb

Miért érdemes szerkeszteni a VBA makrókat?

A makró rögzítő - bár hatékony - ugyanakkor nagyon korlátozott. Bizonyos esetekben lassú makrókat készít, rögzíti azokat a műveleteket, amelyeket nem szándékozott megismételni, vagy olyan dolgokat rögzít, amelyekről nem gondolta, hogy csinál. A makrók szerkesztésének megtanulásával gyorsabban, hatékonyabban és kiszámíthatóbban futhatnak.

A problémák megoldása mellett a termelékenység hatalmas növekedését is elérheti, ha kihasználja a makrók teljes erejét. A makróknak nem csak a feladatok rögzítéseinek kell lenniük - a makrók tartalmazhatnak logikát is, így csak bizonyos feltételek mellett hajtanak végre feladatokat. Pár perc alatt kódolhatja azokat a ciklusokat, amelyek egy mozdulattal több száz vagy ezerszer megismétlik a feladatot!

Az alábbiakban néhány hasznos tippet talál a makrókód optimalizálásához, valamint eszközöket a makrók keményebb és okosabb munkájához.

Gyakori makrószerkesztési példák

Gyorsítsa fel a makrókat

Ha van egy makrója, amely hosszú ideig tart, néhány oka lehet annak, hogy lassan fut.

Egyrészt: amikor egy makró fut, az Excel mindent valós időben jelenít meg, ahogy az történik - bár lehet néz Gyorsan nekedmegmutatva a mű jelentős teljesítménysiker. Az Excel lényegesen gyorsabb futtatásának egyik módja, ha elmondja hagyja abba a képernyő frissítését:

'Disable Screen Updating Application.ScreenUpdating = False' A képernyőfrissítő alkalmazás engedélyezése.ScreenUpdating = True

Az „Application.ScreenUpdating = False” sor azt jelenti, hogy a makró nem fog működni, de sokkal gyorsabban fog futni. Ne feledje, hogy a képernyőfrissítést mindig a True értékre kell állítania a makró végén, különben előfordulhat, hogy az Excel nem úgy fog viselkedni, ahogyan azt később elvárta!

A makrók felgyorsításának másik módja:kapcsolja ki az automatikus számítást a makróban. Ha összetett táblázatokkal dolgozott, akkor tudja, hogy a kis változtatások több ezer olyan számítást indíthatnak el, amelyek elvégzése időbe telik, ezért sokan kikapcsolják az automatikus számítást az Excel beállításaiban. Ezt VBA kóddal is átkapcsolhatja, így a makró továbbra is gyorsan működik más számítógépeken. Ez segít azokban az esetekben, amikor sok képletcellát másol be, vagy sok számítás indul el, amikor adatokat illeszt be egy tartományba:

'Az automatikus számítási alkalmazás letiltása.Calculation = xlCalculationManual' Az automatikus számítási alkalmazás engedélyezése.Calculation = xlCalculationAutomatic

Hurok és logika hozzáadása (ha az állítások)

A makró rögzítő minden műveletét kódként menti a VBA nevű nyelven. A VBA több, mint pusztán a műveletek Excelben történő rögzítésének módja - ez egy programozási nyelv, ami azt jelenti, hogy tartalmazhat kódot, amellyel eldöntheti, hogy milyen műveleteket kell végrehajtani, vagy megismételheti a műveleteket, amíg egy feltétel nem teljesül.

Hurok

Tegyük fel, hogy makrót akart készíteni, amely jelentést készített, és ennek a makrónak a részeként tizenkilenc lapot kellett hozzáadnia a munkafüzethez, összesen húszat. Rögzítheti magát, ha újra és újra rákattint a (+) gombra, vagy írhat egy ciklust, amely megismétli a műveletet az Ön számára, például:

Sub ReportPrep () Dim i As Long For i = 1 to 19 Sheets. Add Next i End Sub

Ebben a példában a A hurokhoz, amely egyfajta ciklus, amely tételek között iterál. Itt a tartományunk az 1 és 19 közötti számok, az „i” nevű változót használva, így a hurok nyomon követheti. A ciklusunkon belül csak egy művelet ismétlődik a számára éskövetkező sorokat (a lap hozzáadása), de a cikluson belül annyi kódot adhat hozzá, mint például a lap formázása, vagy az adatok másolása és beillesztése minden lapra - bármit meg akar ismételni.

Ha Nyilatkozatok

An Ha kijelentés segítségével eldönthető, hogy valamilyen kód fut -e vagy sem, logikai teszt segítségével a döntéshez. Íme egy egyszerű példa:

Sub ClearIfSmall () If Selection.Value <100 then Selection. Clear End If End Sub

Ez az egyszerű példa bemutatja az If utasítás működését - tesztel valamilyen feltételt, amely igaz vagy hamis (a kiválasztott cella értéke kevesebb, mint 100?), és ha a teszt igaz értéket ad vissza, a benne lévő kód fut.

Ennek a kódnak az a hiányossága, hogy egyszerre csak egy cellát tesztel (és nem sikerül, ha több cellát választ ki). Ez sokkal hasznosabb lenne, ha… végigkísérné a kiválasztott cellákat, és mindegyiket tesztelné…

Sub ClearIfSmall () Dim c Mint tartomány minden c kiválasztott résznél. Cellak Ha c.Érték <100, akkor c. Törölje a végét, ha a következő c End Sub

Ebben a példában van egy kicsit más For ciklus - ez nem cikluson keresztül számol, hanem a kijelölés összes celláján keresztül, a „c” nevű változó segítségével követi nyomon. A cikluson belül a „c” érték határozza meg, hogy a cellát törölni kell -e vagy sem.

A ciklusok és az If utasítások tetszőleges módon kombinálhatók - hurkokat helyezhet a hurkok belsejébe, vagy egy if -t a másikba, vagy ha egy if -t használ, hogy eldöntse, hogy a ciklus egyáltalán fut -e.

<<>>

Távolítsa el a görgetési effektusokat

A makrókód szerkesztésének gyakori oka a képernyő görgetésének eltávolítása. Makró rögzítésekor előfordulhat, hogy görgetéssel kell elérnie a munkalap más területeit, de a makróknak nem kell görgetniük az adatok eléréséhez.

A görgetés több száz vagy akár ezer sornyi felesleges kóddal is megterheli a kódot. Íme egy példa a kódra, amelyet a görgetősávra kattintás és húzáskor rögzít:

Ez a fajta kód teljesen felesleges, és más funkciók befolyásolása nélkül törölhető. Még ha meg akarja tartani a görgetést, ez a kód továbbra is ciklusba tömöríthető.

Távolítsa el a felesleges kódot

A rögzített makrók általában sok redundáns kódot adnak hozzá, amelyek nem feltétlenül tükrözik azt, amit a makrónak meg kell tennie. Vegyük például a következő rögzített kódot, amely rögzíti a cella betűnevének megváltoztatását:

Annak ellenére, hogy csak a betűtípus nevét változtatták meg, tizenegy (11) betűváltozást rögzítettek, például a betűméretet, a szöveghatásokat stb. a rögzített makró nem működne!

Ez a makró megváltoztatható úgy, hogy csak a betűtípus nevét módosítsa:

Ez a makró nemcsak a tervezettnek megfelelően fog működni, hanem sokkal könnyebben olvasható is.

Távolítsa el a kurzormozgásokat

Egy másik dolog, amit a makrók rögzítenek, a munkalap és a cellakiválasztás. Ez azért jelent problémát, mert a felhasználó könnyen elveszítheti nyomát azon, amin éppen dolgozott, ha a kurzor a makró futtatása után más pozícióba kerül.

A görgetéshez hasonlóan, te szükség lehet a kurzor mozgatására, és különböző cellák kiválasztására egy feladat végrehajtásához, de a makróknak nem kell a kurzort használniuk az adatok eléréséhez. Tekintsük a következő kódot, amely másol egy tartományt, majd beilleszti három másik lapra:

Ezzel a kóddal van néhány probléma:

  • A felhasználó elveszíti korábbi helyét a munkafüzetben
  • A makró nem határozza meg, hogy milyen lapot másolunktól től - ez problémát okozhat, ha a makrót rossz lapon futtatta

Ezenkívül a kód nehezen olvasható és pazarló. Ezek a problémák könnyen megoldhatók:

Ebben a kódban jól látható, hogy az 1. lapról másolunk, és sem az aktív munkalapnak, sem a kiválasztott tartománynak nem kell változnia az adatok beillesztéséhez. (Az egyik jelentős változás a „PasteSpecial” használata a „Paste” helyett - A tartományobjektumok, például a „Range („ C4 ””) csak a PasteSpecial parancshoz férnek hozzá.)

Amikor a kód tele lesz hivatkozásokkal a „.Select” és a „Selection” kifejezésre, ez azt jelzi, hogy van lehetőség a kód optimalizálására és hatékonyabbá tételére.

wave wave wave wave wave