Visual Basic for Applications

A Wikipédiából, a szabad enciklopédiából
Ugrás a navigációhoz Ugrás a kereséshez

A Visual Basic for Applications (VBA) az egyik megvalósítása a Microsoft esemény-vezérelt programnyelvének, a Visual Basic 6-nak – aminek 2008-ban szűnt meg a fejlesztése – és a hozzá tartozó integrált fejlesztőkörnyezetnek. Bár a Microsoft a Visual Basic támogatását és fejlesztését abbahagyta, a VBA programnyelv újabb verzióját hozták létre 2010-ben, így a Visual Basic for Applications 7 került a Microsoft Office alkalmazásokba.

A Visual Basic for Applications lehetővé teszi felhasználó által definiált függvények létrehozását, folyamatok automatizálását és a Windows API és más alacsonyabb szintű funkciók DLL-eken keresztüli elérését. Felváltja ill. kibővíti az alkalmazások korábbi saját makró-programozási nyelveinek funkcióit, mint pl. a Word WordBASIC-éit. A futtató alkalmazás sok funkcióját lehet vele vezérelni, többek között a felhasználói felület elemeit, mint a menük és eszköztárak, és tetszőleges űrlapokat és párbeszédpaneleket.

Ahogy a neve is utal rá, a VBA közeli rokonságban van a Visual Basic-kel és a Visual Basic futásidejű könyvtárat használja. Viszont a VBA-kód alapvetően csak egy futtató alkalmazásban tud lefutni, önálló alkalmazásként nem. OLE automatizálással viszont vezérelhető egy applikáció egy másikból VBA-val. Például VBA-val automatikusan készíthetünk egy Microsoft Word riportot Microsoft Excel adatokból, amiket az Excel automatikusan gyűjt szenzorok folyamatos lekérdezésével. VBA-val használhatók, de nem készíthetők, ActiveX/COM DLL-ek, és későbbi verziók osztály modulokat is támogatnak.

A VBA a legtöbb Microsoft Office alkalmazásban megtalálható, köztük az Office for Mac OS X-ben (a 2008-as verziót kivéve), továbbá más Microsoft alkalmazásokban is, mint a Microsoft MapPoint és a Microsoft Visio. A VBA-t, legalábbis részben, olyan applikációk is megvalósítják, amiket nem a Microsoft adott ki, mint az ArcGIS, az AutoCAD, a CorelDraw, a LibreOffice, a Reflection, a SolidWorks, és a WordPerfect.

Megvalósítás[szerkesztés]

A VBA-ban írt programot Microsoft P-Code-ra (packed code [tömörített kód]), egy saját köztes nyelvre fordítják le a futtató alkalmazások (Access, Excel, Word, Outlook, PowerPoint, stb.) és a dokumentum adatfolyamától külön adatfolyamban tárolják COM Strukturált Adattároló fájlokban (pl. .doc vagy .xls). A köztes kódot ezután egy virtuális gép futtatja le (ami a futtató alkalmazásban fut). Sok régi BASIC nyelvjáráshoz (főleg közvetett elődjéhez, a Microsoft BASIC-hez) való hasonlósága ellenére, a VBA egyikkel sem kompatibilis a Visual Basic-et kivéve, amivel a VBA modulok és osztályok forráskódja közvetlenül importálható, és amivel közös könyvtáruk és virtuális gépük van. A kompatibilitás a Visual Basic 6-os verziójáig fennáll; a VBA nem kompatibilis a Visual Basic .NET-tel (VB.NET). A VBA a Microsoft tulajdona, és a COM felületet leszámítva, nem nyílt szabvány.

Automatizálás[szerkesztés]

A futtató alkalmazással való kommunikáció OLE Automatizálással történik. Jellemzően a futtató alkalmazás biztosít egy típus-könyvtárat és alkalmazásprogramozási felület (application programming interface [API]) dokumentációt, ami leírja hogyan kommunikáljon a VBA az alkalmazással. A dokumentáció a VBA fejlesztőkörnyezetében az Objektum Keresővel (Object Browser) tekinthető meg.

Egy VBA-program, ami egy adott alkalmazás OLE Automatizálás felületére lett írva, nem használható egy másik alkalmazás automatizálására, akkor sem, ha ez utóbbi biztosítja a Visual Basic futásidejű környezetét, mert az OLE Automatizálás felületeik különbözőek. Például, egy VBA-program, ami a Microsoft Word automatizálására lett írva, nem használható egy másik szövegszerkesztőben, akkor sem, ha ez utóbbiban lehet VBA-t futtatni.

Ezzel ellentétben, több alkalmazás automatizálható a VBA-t futtató alkalmazásból Alkalmazás-objektumokkal. A különböző könyvtárakra hivatkozásokat VBA-ban a kliens alkalmazásban kell létrehozni, mielőtt bármilyen eljárás, objektum, stb. elérhetővé válna a futtató alkalmazásban. Ezt az úgynevezett korai vagy késői kötéssel oldhatjuk meg. Ezek az alkalmazás-objektumok hozzák létre az alkalmazásra való OLE-hivatkozást, amikor létrejönnek. Ezeknek az alkalmazásoknak explicit módon kell az alkalmazás-objektumokon keresztül utasításokat kiadni ahhoz, hogy megfelelően működjenek.

Például, Microsoft Access-ben írt VBA-kód Excel, Word és Outlook könyvtárakra tud hivatkozni; így egy olyan alkalmazást lehet készíteni, ami futtat egy lekérdezést Access-ben, az eredményt Excel-be exportálja majd kiértékeli, végül Word-ben táblázatokká alakítja vagy elküldi e-mailben Outlook-kal.

A VBA-programok futtatása hozzáköthető nyomógombhoz, makróhoz, billentyűkombinációhoz, vagy OLE/COM eseményhez, például mikor az alkalmazás egy dokumentumot nyit meg. A nyelv Űrlapokat biztosít felhasználói felületek létrehozásához, amikhez különböző funkciókkal való bővítéshez AciveX vezérlők adhatók.

Folyamatok közötti kommunikáció automatizálásához többek között használhatók a Dinamikus Adatcsere (Dynamic Data Exchange [DDE]) és a Valósidejű Adat (RealTimeData [RTD]), amik egy Komponens Objektum Modell (Component Object Model [COM]) automatizált kiszolgálótól kapnak dinamikus ill. valós idejű pénzügyi vagy tudományos adatokat.

Biztonsági vonatkozások[szerkesztés]

Mint bármelyik átlagos programozási nyelvben, így VBA-makrókban is lehet rosszindulatú kód. VBA használata esetén a biztonsági beállítások a felhasználó kezében vannak, nem a programozóéban. A VBA-t futtató alkalmazás beállításai elérhetőek a felhasználó számára. Bármilyen VBA-makrót tartalmazó dokumentumot futtató szoftverben előre megadhatók felhasználói beállítások. A végfelhasználók megvédhetik magukat egy támadástól az alkalmazásban a makrók futtatásának a letiltásával, vagy úgy, hogy VBA-kód futtatását csak a megbízható forrásból származó dokumentumoknál engedélyezik.

Verziótörténet[szerkesztés]

  • A VBA a MS Excel 5.0-ás verziójával jelent meg 1993-ban. Azonnali sikert aratott a vállalatoknál dolgozó fejlesztők körében. Miután a Microsoft Project-be is bekerült, ill. felváltotta Access-ben az AccessBASIC-et és Word-ben a WordBASIC-et, még népszerűbb lett.
  • A VBA 4.0-ás verzió a következő neves kiadás, ami az előzőhöz képest egy teljesen feljavított változat. 1996-ban adták ki, C++-ban íródott, és egy objektum-orientált nyelvvé vált.
  • A VBA 5.0-ás verziót 1997-ben dobták piacra a MS Office 97 termékeivel. Az egyetlen kivétel az Outlook 97, ami a VBScript-et használta automatizálásra.
  • 1999-ben dobták piacra a VBA 6.0-ás verziót, elsősorban az Office 2000-ben COM bővítmények támogatásához. A VBA 6.2-es verziót az Office 2000 SR-1-gyel adták ki.
  • A VBA 6.3-es verziót az Office XP után adták ki, az Office 2003-at követte a VBA 6.4, majd a VBA 6.5 jött ki az Office 2007-tel.
  • Az Office 2010-ben a VBA 7.0-ás verziója érhető el. A VBA 6.5-höz képest nincsenek új fejlesztői elemek a VBA 7-ben a 64-bites támogatást leszámítva. Bár a Microsoft a VBA 6.5/Office 2007 kiadása után már nem licenszeli a VBA-t más alkalmazásoknak.
  • Az Office 2013-ban és Office 2016-ban a VBA 7.1-es verziója érhető el.

Fejlesztés[szerkesztés]

2007 július 1-től a Microsoft már nem licenszeli a VBA-t új vevőknek. A .NET Framework megjelenése óta a VBA mindenkori verziójához .NET-alapú nyelveket akartak adni, aminek az 1.0-ás és 1.1-es verzióiban egy Script for the .NET Framework nevű futásidejű szkript technológia volt elérhető. A Visual Studio .NET 2002 és 2003 SDK-kban egy külön szkript IDE volt, Visual Studio for Applications (VSA) néven, ami támogatta a VB.NET-et. Egyik legfontosabb funkciója az volt, hogy a technológiához csatlakozó felületet el lehetett érni Active Scripting-en keresztül (VBScript és JScript), így .NET-et nem ismerő alkalmazásokra is lehetett szkripteket írni .NET-es nyelvekkel. Viszont a VSA elavult státuszt kapott a .NET Framework 2.0-ás verziójában, nyitva hagyva a kérdést, hogy az Active Scripting-et használni szándékozó alkalmazásokat hogyan lehet így továbbfejleszteni (bár „szkriptelni” lehet C#-pal, VBScript-tel, és más .NET-es nyelvekkel, a fordítást és futtatást futásidőben a standard .NET futási környezettel telepített könyvtárak el tudják végezni).

A Microsoft a Mac-re telepíthető Microsoft Office VBA-támogatását a 2008-as verzióval megszüntette, majd a 2011-es verzióval visszaállította. A Windows-ra telepíthető verzióból állításuk szerint nem áll szándékukban kivenni a VBA-t.

Az Office 2010-es verziójával kiadták a VBA7-et, ami egy igazi mutató adattípussal bővült: a LongPtr-rel. Ezzel 64-bites címtérre is lehet hivatkozni. Az Office 2010 64-bites telepítése nem támogatja az MSComCtl (TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListViews, ImageList, Slider, ImageComboBox) vagy a MSComCt2 (Animation, UpDown, MonthView, DateTimePicker, FlatScrollBar) közös vezérlőit, így 32-bitesről 64-bitesre történő váltásnál olyan VBA-kód, ami ezeket a vezérlőket használja, nem fog működni. Ez nem érinti az Office 2010 32-bites verzióját. A VBA7-ben nincsenek meg ezeknek a vezérlőknek a 64-bites verziói, a fejlesztők nem válthatnak 64-bitesre ilyen VBA-kódokat. A Microsoft a szoftver beszállítójának felkeresését ajánlja ilyen VBA-vezérlők 64-bites verziójának a beszerzéséhez.

Fordítás[szerkesztés]