Cesta do pravěku: Tak šel čas s Microsoft VBA

Tímto článkem bych se na své osobě pokusil volnější formou prezentovat vývoj aplikací postavených na produktech Microsoft Office, především Excelu.

Autor:  Petr Pecháček, Excelplus.NET

Jak jsem začínal

„Kdepak VBA, ty jsi vlastně ještě mladík,“ slyšel jsem tuhle, „já programovala už v Quattro Pro.“ Popravdě řečeno, tento software se pamatuji jen matně (dnes už žije jen jeho vnuk jako součást kancelářského balíku Word Perfect Office společnosti Corel). V krátkém sledu po sobě jsem na škole zažil jinak málo známý tabulkový procesor As-Easy-As a Excel 5. Brzy poté jsem držel v ruce svou první krabicovou verzi Office 97. Úsměvné je to, že ještě rok jsem mohl jen studovat obsáhlého průvodce v papírové podobě, protože jsem nevlastnil osobní počítač. Surfování po internetu tehdy probíhalo nezřídka na strojích řady X86 a na disketách se v dokumentech Wordu vesele šířily první makroviry...

Jak jsem se stal vášnivým programátorem ve VBA

Hlavním nástrojem, který je tu už více jak deset let, je programovací jazyk Visual Basic for Applications (VBA). Psal se rok 1993 a v Excelu verze 5 se objevil Excel 4 Macro jazyk, který může být považován za praotce VBA. Nicméně zrození VBA a velký boom bych datoval až do roku 1997, kdy Microsoft namísto makrolistů integroval přímo do Office 97 editor (VBE IDE) a dal tak uživatelům zdarma k dispozici silný nástroj v poměrně komfortním vývojářském prostředí. Jazyk vycházel jako takový z anglického Visual Basicu 5 a byl nasazen na objektový model té či oné aplikace Office. Office již tehdy nabídly přístup ke kolekci panelů nástrojů (CommandBars), kolekci kreslených objektů (Shapes) nebo třeba dokázaly zpracovat vybrané události listu i sešitu. Editor společný všem aplikacím vítal českého programátora v rodném jazyce a předkládal česky i část nápovědy k VBA. A když Petr a Markéta Šitinovi sepsali pro Office 97 českou (a do dnešního dne asi jedinou) referenční příručku k VBA, mohlo mé srdce uživatele a začínajícího vývojáře zaplesat. Titul vývojáře jsem si pochopitelně přišpendlil sám.

Do VBA v Office 2000 se kromě jiného promítly změny odpovídající nové verzi Visual Basicu verze 6. Objevilo se ADO, podpora COM doplňků a dalších ActiveX, kontingenční grafy, nemodální formuláře, Microsoft Office Web Components, digitální podpisy a další. Editor VBA a ani jeho nápovědu už nikdo nepřekládal, naopak Excel v řadě případů vykazoval chyby v lokalizované edici. V Office 2000 VBA naposledy kopírovalo vývoj velkého Visual Basicu. Pozdější servisní balíčky u této verze značně omezili Excel 4 makra a také chování Outlooku.

Office 2002 (XP) přineslo barevná ouška listů Excelu, průhlednost objektů, diagramy, inteligentní značky (SmartTags), panel Závislosti vzorců, vkládání symbolů aj. Zpětně se mi tato verze Office jeví jako nejméně stabilní a používal jsem ji pomálu.

Office 2003 potvrdily zájem o formát dokumentů XML a jeho mapování nabídly i prostřednictvím VBA. Ukázaly také světu objekt Seznam (ListObject, v Excelu 2007 přejmenován na Tabulka). Jejich instalátor poprvé obsahoval podporu pro Visual Basic .NET. Visual Basic pro aplikace zůstal po několik dalších let neměnný a jeho široký záběr a bezplatné použití nenutilo programátory poohlížet se po něčem jiném. Čím dál víc jsem se i já vzdaloval od cesty velkého Visual Basicu a nevnímal jeho vývoj …

Jak jsem propásl Visual Studio Tools for Office

Microsoft své úsilí v té době věnoval vývoji jazyka Visual Basic .NET a také novému nástroji – Visual Studiu Tools for Office (VSTO). Zjednodušeně řečeno, VSTO představovalo jakousi kolekci nástrojů a šablon pro Visual Studio, na jejich základě byl vývojář schopen vytvořit doplňky postavené na produktech Office, ať už na úrovni dokumentů nebo celých aplikací. Rovněž bylo možné s jejich pomocí vytvářet doplňky sdílené. Stejně jako Visual Studio ale nebylo zdarma. Dnes je VSTO přímo součástí Visual Studia 2008.

Jak jsem čekal na příchod Office 2007 a zavládl chaos

Office 2007 přinesly řadu změn a dodnes vyvolávají rozporuplné pocity. V první řadě jde o Ribbon, nebo, chcete-li, Pás karet. Ani po delší práci mi nepřináší velké potěšení a hlavně mi ji neurychluje. Vývojářům komplikuje život jeho návrh a správa, ve VBA se prakticky omezují jen na naplnění procedur pro akce přiřazené k prvkům (Callbacks). Použití a rozložení prvků na Ribbonu definuje soubor CustomUI.xml obsažený v ZIP souboru, kterým ve skutečnosti soubory Office 2007 jsou. Zatím jsem ale nenašel vhodného kandidáta pro editaci zabalených Office Open XML souborů. Jako první se nabízí freeware Custom UI Editor, která umí začlenit do komprimovaného souboru i obrázky a vygeneruje obálky procedur pro VBA. Naneštěstí práce s editorem stojí a padá na jeho neschopnosti zpracovat diakritiku v českých popiscích prvků.

Výčet změn v Office 2007 by byl skutečně dlouhý. Kromě Ribbonu jen letem světem - náhledy v reálném čase, upravený objektový model pro grafy a jádro pro jejich vykreslování, rozšířená paleta barev a podmíněné formátování, několikanásobně větší plocha listu Excelu, nestandardní kreslené objekty a nové efekty, rozšíření rodiny aplikací Office – to vše musí vzít programátor v potaz. Bohužel i po vydání prvního Service Packu obsahují Office 2007 velké množství chyb, z nichž některé snad ani neměly opustit Microsoft, natož projít rukama betatesterů. Stav dále komplikuje i neúplná kompatibilita se staršími formáty souborů. Do testování je pochopitelně nutné zařadit i operační systém Windows Vista a tak vývojáři občas neví, kam dřív skočit …

Jak přišly a odešly makroviry a kód VBA není v bezpečí

Hned zkraje článku jsem zmínil pojem makrovir. Označovala se tak makra, která se nejčastěji v šablonách Normal.dot ve Wordu šířila s dokumenty na nich postavenými. Zpravidla na pozadí spouštěly soubory nesoucí škodlivý obsah. Už tehdy si autoři makrovirů počínali velmi chytře a aktivity maker dovedně skrývali různými "stealth" technikami. Doba makrovirů je dávno pryč, dnes nejsou lidově řečeno "in". A jak je to se zabezpečením kódu? Projekty VBA obsahující procedury a funkce je možné chránit heslem stejně jako třeba listy Excelu. Bohužel použitá technika je napadnutelná a dlouhá léta je možné k odhalení know-how programátora použít backdoor knihovny. Odkrytí je tak záležitostí sekund. Navíc není potřeba ani tzv. Password Recovery software. Zámečníka dnes dokonale nahradí kancelářský balík OpenOffice.org, který k mému zděšení rozkrývá veškeré chráněné projekty, včetně doplňků. Inu, není se čemu divit, vždyť třeba dokumentace BIFF formátu od vývojářů OpenOffice.org je jedna z nejpodrobnějších. Deset let tak vývojáři marně křičí o pomoc.

Jak se vývojář musí vyrovnat s odlištnostmi Visual Basicu 6 a VBA

Jak již bylo řečeno, VBA drželo krok s Visual Basicem do jeho verze 6. Do dnešního dne ale používá mírně odlišný typ formulářů (UserForm) a ovládacích prvků na nich - Microsoft Forms 2. Od prvků z VB6 se liší kupříkladu absencí tzv. handle a množstvím dostupných vlastností. Drobné odchylky lze zaznamenat dokonce i mezi ovládacími prvky používanými na listu a na formuláři VBA. Až na výjimky není možné na standardní prvky VBA formuláře aplikovat graficky zdařilejší XP styl. Nesmyslné minimální velikosti ovládacích prvků na listu a ani podivné prostrkání znaků v popiscích nepříspívá k dobré štábní kultuře. Navíc, ačkoliv formuláře v Office podporují prvky Visual Basicu 6, řada těch běžných není kvůli licenční politice přístupná (viz pojmy jako Design Time licence, Microsoft Office verze Developer a další). Ve VBA tak citelně chybí prvky jako RichTextBox, Timer, Picture nebo databázová komponenta typu DataGrid.

Jak občas potřebuji rozšířit schopnosti VBA

VBA není jedinou odnoží Visual Basicu. V roce 1995 vznikl i trochu podceňovaný VBScript. Ten je určen především jako prostředek programátorů vyvíjejících pro webový prohlížeč Internet Explorer. Jeho kód je díky interpretu Windows Scripting Host (WSH) možné spouštět v systému i samostatně a dokážeme se přes něj napojit na objektový model aplikací Office. Jazyku VBA pak propůjčuje kupříkladu model File System Object (FSO) pro práci se soubory a složkami, je schopen poskytnout i přístup k regulárním výrazům v rámci objektu RegExp nebo rozšířit nástroje pro práci s registry.

Pro náročné je dále dostupné z VBA rozhraní Application Programming Interface (API), jež předkládá funkce samotného systému. Jeho použití je určeno pro ostřílené zálesáky. Nevhodné aplikování API nezřídka způsobí pád aplikace (typicky funkce CopyMemory, subclassing a hooking).

Nutno na tomto místě dodat, že VBA není jen záležitostí balíčku Office a dokonce ani systému Windows. Můžeme na něj narazit u aplikací jako je AutoCAD nebo CorelDraw. A co víc, VBA už kdysi zavítalo do Office 2004 provozovaných na systému Mac OS X. Popravdě řečeno, na něm si ale vývoj pro Office neumím představit. Viděl jsem, zkusil jsem, odešel jsem …

Jak se vracím domů k Visual Basicu 6 od Visual Basicu .NET

Mezi oběma jazyky jsou skutečně generační rozdíly. Visual Basic 6 samozřejmě nemá tu sílu svého následníka. Microsoft .NET Framework, ze kterého čerpá Visual Basic .NET, nelze ale brát jako samozřejmost na každém počítači, stejně jako tomu dříve bylo u DirectX. Může tak vzniknout paradoxní situace, kdy k dvoumegové aplikaci budete muset dodat dvousetmegový .NET Framework 3.5. Naštěstí si zatím  v 80 % vystačíme s dvacetimegovou instalací Frameworku verze 2. Nepříjemné je i množství pojmů jako PIA, FullTrust, COM Class, Automation, GUID, assembly, strong name, TLB, wrapper, Interop a další, které se na začátečníka sesypou a ten pod náporem leckdy ztratí chuť opustit VBA nebo VB6. A když přijde požadavek programovat i pro stále rozšířené Office 2000, může být rozhodnuto ...

Jak se sám neumím rozhodnout pro Visual Studio a přesto radím

Investice do Visual Studia by měla být promyšlená, cena verze Professional se pohybuje okolo 20000 Kč. Rozhodně si nevystačíte s verzí Express. Na druhou stranu, přes Visual Studio je možné zpracovat vlastní podokna úloh (TaskPanes, dříve ActionPanes), inteligentní značky (SmartTags), napojení na webové služby a mnohé další. Jestliže oželíte vizuální návrhář pro Ribbon (Ribbon Designer), jenž je integrován do Visual Studia 2008, stojí za to podívat se na stránkách internetových aukcí po Visual Studiu Tools for Office 2005. Poté stačí již jen dohrát šablony pro Office 2007. Budete tak schopni vytvářet doplňky na úrovni aplikace nebo dokumentu, případně doplňky sdílené, a to pro Office 2003 (SP3, Professional) nebo Office 2007. Nejzazší verzí, schopnou podpory .NET, jsou pak Office XP. Pokud by vám žádná z šablon VSTO nevyhovovala, nabízí se jako zajímavá alternativa Add-in Express pro Visual Studio.

Jak já vidím svět vývojářů pro Office

Dnes se podle mého názoru setkávají dva proudy programátorů - vývojáři ve Visual Studiu a programátoři ve VBA. Jedni nemají zkušenost s vyvýjením pro Office, druzí i přes podobnost neznají jazyk Visual Basic .NET, natož VSTO. Aby toho nebylo málo, Visual Basic jako takový dnes není jazykem číslo jedna ve Visual Studiu a tomu odpovídá i množství článků a dostupných příkladů. Deset let klidného programování ve VBA je každopádně minulostí.

Jaká nevidí  budoucnost VBA ani křišťálové koule

V době vydání tohoto článku už měla být na světě betaverze Office 14 (jak jistě víte, číslo 13 bylo přeskočeno). Faktem je, že jejich podobu zná v tuto chvíli jen pár vyvolených uvnitř Microsoftu. Podle všeho i tato nová verze ovšem bude podporovat VBA. Dočkáme se lepší podpory správy Ribbonu z VBA, která je v Office 2007 více než mizerná? Integruje Microsoft do Office editor XML? Kdo ví ...

Historie Visual Basicu

1991 - Visual Basic 1 (VB1)
1992 - Visual Basic 2 (VB1)
1993 - Visual Basic 3 (VB1)
1993 - Visual Basic for Applications (VBA)
1995 - Visual Basic 4 (VB4), Visual Basic Scripting Edition (VBScript)
1997 - Visual Basic 5 (VB5)
1998 - Visual Basic 6 (VB6)
2002 - Visual Basic .NET (verze 7)
2003 - Visual Basic .NET 2003 (verze 7.1)
2004 - Visual Studio Tools for Office 2003 (verze 1)
2005 - Visual Studio Tools for Office 2005 (verze 2)
2007 - Visual Studio Tools for Office 2005 Second Edition (VSTO 2005 SE)
2007 - Visual Studio Tools for Office 2008 (verze 3)

Odkazy

Excel a VBA
http://excelplus.net
http://dataspectrum.cz
Visual Basic .NET
http://vbnet.cz/
http://www.startvbdotnet.com/
Přehled produktů Visual Studio 2008
http://www.microsoft.com/cze/msdn/produkty/vstudio/default.mspx
Visual Studio Tools for Office
Domácí stránka: http://msdn.microsoft.com/en-au/office/aa905533.aspx
Webcasty: http://www.microsoft.com/cze/msdn/webcasts/default.mspx

Články ze série Microsoft TechNet nevytváří redakce Živě.cz, ale partneři programu Microsoft TechNet. Jsou publikovány v rámci mediálního partnerství Živě.cz a společnosti Microsoft.

Diskuze (4) Další článek: Nové verze Firefox 3.0.2 a 2.0.0.17 zvyšují zabezpečení

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,