A mai napon a legrettegettebb programozási nyelv, a VBA jövőjéről lesz szó, melyet több millióan használnak a különféle Office programok automatizálására (Excel, Word, Outlook, PowerPoint stb).
Akinek nincs programozói múltja, az is viszonylag könnyedén megtanulhatja. Számtalan könyv, videóanyag érhető el, sokszor gyakorlati példákkal. No és persze ott vannak az élő/online élő kurzusok, ahol élőben lehet kérdezni, mintafájlokat megvitatni, fejleszteni. Az alapokat akár egy egynapos kurzussal is le lehet fektetni, ez főként az alapfogalmakat, a makrórögzítő használatát és a felvett kód szerkesztését foglalja magába.
Mégis szüntelenül ott lebeg felette Demokész kardja: mikor szünteti meg a Microsoft, mikor cseréli le valami másra? Persze gondolhatnád, minek valamit lecserélni mikor jól működik és évtizedek óta teszi a dolgát? Nos, a jelek nem abba az irányba mutatnak, hogy fejlesztenék – pár gondolat, miért vélekedem így:
- Az elmúlt több, mint 20 évben nem sokat változott a VBA szerkesztői felülete. Olyan, mintha működne az időgépünk és visszarepültünk volna a ’90-es évek végére.
- Persze az újabb Excel verziók újdonságait hozzáadják a VBA-hoz de az sem mindig zökkenőmentes.
- Több olyan – már létező – megoldás van Excel-ben, mely a VBA leváltására hivatott – egyelőre azonban korántsem teljes értékű alternatíva: ott a Power Query (pl. lépések megjegyzése, fájlok egyesítése vagy összefűzése) vagy épp a vizuális makró kreálás (mint az easymorph).
- Vannak aztán különféle megvásárolható bővítmények (mint ez vagy ez vagy épp ez), melyeknek szép piaca van és az Excel/VBA fejlesztésének hiányosságait igyekeznek kiküszöbölni vagy csak a meglévő megoldásokat pár kattintással elérhetővé tenni.
- Aztán ott vannak a „kihívók”, melyeket a VBA helyett használnak, ilyen a Python vagy a Java Script. Apropó, Java Script: a Microsoft ebbe az irányba indult el, mármint ami a VBA lecserélését illeti. Pontosabban annak egy kibővített változatát, a TypeScript-et favorizálja. Miért éppen ezt? Mivel az ezzel kreált kódok – majd valamikor – futni fognak asztali és online környezetben, csakúgy mint 32 és 64 bites rendszeren, többféle operációs rendszeren (Windows, Mac, Linux), valamint minden olyan eszközön, mely Office-t futtat. Vagyis böngésző-, operációs rendszer- és eszközfüggetlen futtatást tesz lehetővé. Túl szépen hangzik, hogy igaz legyen, nemde?
Az Office-ra szánt VBA utód az Office Script nevet kapta és ez nem csak légből kapott infó: van létező weboldala, példákkal – egyelőre „preview” módban:
https://docs.microsoft.com/en-GB/office/dev/scripts/
Print screen:
Lássunk először is az Office Script-ről pár tudnivalót:
- A publikus próbaváltozatot 2020.01.07-én tették közzé (link).
- Egyelőre az Excel online változatában érhető el
- Egyelőre a Microsoft 365 (korábbi nevén Office 365) -ben érhető el, ott is az alábbi verzióknál (link):
-
- Office 365 Business
- Office 365 Business Premium
- Office 365 ProPlus
- Office 365 ProPlus for Devices
- Office 365 Enterprise E3
- Office 365 Enterprise E5
- Office 365 A3
- Office 365 A5
- Engedélyezése:
-
- Belépés az Admin Center-be (link)
- Settings -> Org settings -> pipát betenni a „Let users automate their tasks in Office on the web” elé
Mindez egy képen:
Ezt követően megjelenik az „Automate” menü az Excel online-ban:
Lássunk akkor egy élő példát ezen link alapján:
1. rész:
Az Office Script-es makrórögzítő elindítása, majd a tartomány egyik sorának színezése. Ezt követően (a fenti link alapján) egy sor hozzáadása a makróhoz, majd a kód lefuttatása. Animáció:
2. rész:
Folytatás, a fenti link alapján két sor hozzáadása a meglévő makróhoz: az egyik táblázatot hoz létre a tartományból, a másik pedig növekvő sorba rendezi a táblázat „Fruit” oszlopát. Az alapállapot visszaállítása után a kódot elmentjük, majd lefuttatjuk, gyönyörűen működik. Újbóli futtatásnál azonban hibát kapunk: „A table can’t overlap another table.” Animáció:
Ha ez hagyományos VBA lenne, a makró elején vissza kellene alakítani a táblázatot sima tartománnyá. Ez az Office Script-nél valahogy így néz(ne) ki:
Látható, hogy a táblázat pontos nevét kellene előbb megtudni, amit – hiszed vagy sem – nem lehet megkapni vagy megváltoztatni Excel Online-ban (link). Mivel ez nem megvalósítható, fel sem lehet venni rögzítővel, vagyis a 2. animációban lévő kódot nem lehet fenntarthatóvá tenni és újra meg újra lefuttatni.
A VBA-ban megszokott, pl. „Sheet1.ListObjects(1).Name” pedig itt szintén nem működik a táblázat nevének kinyerésére.
Az Office Script-hez kapcsolódó API-t egyébként nemrég egyszerűsítették (2020.07.01-i bejegyzés):
https://developer.microsoft.com/en-us/excel/blogs/announcing-a-simplified-api-for-office-scripts/
További Office Script-es példák itt és itt.
Térjünk vissza a VBA sorsára a fentiek tükrében. Van, aki 10-15 évig, egyesek szerint ennél is több ideig, legalább 20 évig velünk marad, vagy sosem fog teljesen eltűnni. Ne feledjük azt sem, hogy a Microsoft nagylelkű a támogatási időszakok tekintetében, vagyis ha meg is szüntetik a VBA-t, valószínűleg még jó pár évig akkor is használható marad.
Lehetséges okai az akár több évtizedes jóslatoknak:
- Számtalan cég fejlesztett ki és alkalmaz Excel/VBA megoldásokat.
Most itt ne a „20 munkalapot összemásolunk makróval egy új munkafüzet külön munkalapjára” típusú megoldásokra gondoljunk – noha ezek is hatékonyak. Láttam például olyat, hogy egy raktározási rendszert Excel/VBA alapon hoztak létre, űrlapokkal, eseménykezeléssel, automatikus készletfigyeléssel és értesítéssel. Vagy akár egy komplexebb árajánlatkérő, mely különféle devizanemeket tudott kezelni és többféle Word sablont használt az árajánlat elkészítéséhez, majd automatikusan el is küldte az ügyfélnek a végső változatot pdf-ben, Outlook-on.
- Túlontúl sok felhasználó invesztált pénzt, időt és energiát a VBA tanulásába.
Ők pedig nem fogják csak úgy sutba dobni ezt a tudást, otthagyni a működő megoldásokat mellyel rengeteg időt és energiát spórolnak meg. Főleg, hogy egyelőre nincs tiszta és világos alternatíva: komplett oktatóanyag, tudásbázis (pl. Excel/VBA fórumok vs. Office Script fórumok). És akkor ott van még az Excel Online vs. Excel Asztali (Desktop) verziója: az Excel Online-t bár folyamatosan fejlesztik, de sokszor alap (vagy annak tűnő) dolgokra nem képes, mint a fentebb említett táblázat nevének kinyerése, illetve módosítása.
- A legtöbb VBA felhasználó nem programozó: logisztikus, pénzügyi szakember, analitikus, kontroller stb. Felismerték, hogy a munkájukat sokkal gyorsabbá/hatékonyabbá tehetik az automatizálás által, így nekiálltak megtanulni a makrózást. Ők csak végső esetben, kvázi kényszerből fognak esetlegesen megtanulni egy új programozási nyelvet, szerintem majd akkor, ha a VBA teljesen eltűnik.
Mindezzel együtt a makrók WEB-es futtatása már létező technológia, ha nem is igazán kiforrott még. Izgatottan várom az időt, mikor az Office Script már nem csak „preview” módban lesz és kapunk hozzá megfelelő oktatóanyagot, lehetőleg videótréning formájában, gyakorlófeladatokkal. És akkor az új VBA korszak kapuja nem csak nyikorogva, résnyire fog kinyílni, hanem valóban kitárul.
Frissítés:
2020.12.10-én ismertetett a Google egy új bővítményt “Macro Converter” néven. Ez az Excel fájlokban lévő VBA kódokat konvertálja át App Script kódokká, melyek működnek Google Sheet-ben (ezáltal pedig elvileg online környezetben is). Link a “Macro Converter” ismertetéséhez (angolul):
https://workspaceupdates.googleblog.com/2020/12/macro-converter-excel-to-google-sheets.html
Részemről az izgatottság és kíváncsiság megvan hogy teszteljem, viszont csak az alábbi Google ügyfeleknél érhető el az új bővítmény:
– Google Workspace Enterprise Plus
– G Suite Enterprise for Education
Sebaj, remélhetőleg a közeljövőben az egyszeri embereknek is elérhetővé teszik, legalább kipróbálásra.
A rengeteg Spam miatt a hozzászólást letiltottam, így kérlek emailen, telefonon vagy Facebook-on oszd meg a véleményedet.
Eddigi visszajelzések, melyeket megosztanék:
“Szerintem a VBA soha nem fog eltűnni. Bár a Microsoft már tett rá kísérletet, hogy hanyagolja (pl. a Mac-es Excel-ben nagyon hektikus a támogatottsága), de a felhasználók, sőt a VBA fejlesztők is visszakövetelték és ezután is vissza fogják követelni.
A VBA viszonylag könnyen érthető és megtanulható, ráadásul nagy teljesítményre is képes, ha arra van igény. Jelenleg úgy látom, hogy az Office Script inkább a VBA makrófelvevőjét helyettesítheti, de valahogy nem érzem azt, hogy komplett dokumentumgeneráló, számlázó vagy raktárkezelő alkalmazást lehet vele írni.
Másik fontos szempont szerintem az a visszafelé kompatibilitás és a megbízhatóság. 1995-ben, az Excel 5-ben (!) megírt számlázó és raktárkezelő VBA alkalmazásom a legfrissebb Office 365 alatt még ma is hibátlanul fut. Én nem szégyennek tartom, hogy nem fejlődött a VBA, hanem inkább erénynek a magasfokú kompatibilitását. Irodai, vállalati környezetben nem az a fontos, hogy egy alkalmazáskörnyezetben mindenből mindig a legújabb legyen, hanem inkább az, hogy pl. több Excel verzióval is kompatibilis legyenek a korábban megírt és jelenleg is futó, üzletileg kritikus alkalmazások.
Mivel az Excel világában az új technológiáknak igenis helye van, illetve be tudnak tölteni olyan szerepet, amire nagy az igény, minden bizonnyal több technológia fog egymás mellett élni és működni. Mindegyik hozza azt, amiben jó és amire való. Ezért nem várom a VBA eltűnését.” (PZoli)
Inspiráció (angolul):
https://www.thespreadsheetguru.com/blog/are-vba-macros-dead
https://docs.microsoft.com/en-GB/office/dev/scripts/
Egy hasznos videó a témában Paul Kelly-től angolul itt és itt.
Szintén hasznos videók Leila Gharani-től ugyancsak angolul itt és itt – a második linken egy egyszerű ciklusra (loop) is található példa a munkalapok tekintetében.
Office Script-es példák a GitHub-on angolul emitt.