C, PHP, VB, .NET

Дневникът на Филип Петров


* Visual Basic for Applications – въведение

Публикувано на 21 септември 2015 в раздел Макроси VBA.

Visual Basic for Applications (VBA) е програмен език от високо ниво, който най-често се използва за автоматизиране на повтарящи се операции вътре в процесите на съществуващи софтуерни продукти. Съдържа някои елементи от обектно-ориентираното програмиране (референции към обекти в паметта), но като цяло можем да го приемем за процедурен език. Създаден е от Майкрософт и се използва масово в техния широко известен офис пакет, но също така може да се срещне в редица други софтуерни продукти като Microsoft Visio, CorelDraw, Corel PhotoPaint, AutoCad, WordPerfect и др. Основната и най-честно използвана функционалност на езика е възможността почти всички действия, които човек извършва с даден софтуерен продукт, да може да бъдат възпроизведени от компютър. Ако например ни се налага да извършим многократно сложни еднотипни операции върху различни обекти (например да преформатираме голям текстов документ по даден шаблон, да приложим поредица от филтри върху множество снимки, и т.н.), ние можем да запишем шаблон за тези действия в програмен код наречен „макрос“, след което просто да изпълняваме този макрос с еднократно натискане на бутон.

В най-простата си форма автоматизацията е просто повторение на определен набор от точно определени действия – процедури. Например в Word това може да бъде поредицата от операции „удебели шрифта, центрирай го, направи го с шрифт Arial и го направи с големина 18pt“. Истинската сила на VBA обаче идва тогава, когато извършваме значително по-сложни операции, които включват условни оператори и цикли – т.нар. структурно програмиране. В този случай ние можем да изпълняваме различни действия спрямо подадените входни данни, които да се повтарят многократно с огромна бързина – нещо, което би отнело неизмеримо много повече време за човек, отколкото би отнело на компютъра. В допълнение VBA ни позволява да излезем извън пределите на един софтуерен продукт, като от него контролираме друг чрез т.нар. „OLE automation“. Например можем да генерираме документ в Word на базата на данни от таблица в Excel, след което да го изпратим по електронна поща чрез Outlook – всичко това може да бъде програмирано чрез един скрипт, който се изпълнява с еднократно натискане на бутон.

Това, което отначало трябва да знаем за VBA е, че програмите, които пишем не генерират изпълним машинен код (например EXE под Windows). Сорс кодът на VBA се компилира до т.нар. P-code (пакетиран код). Този код различните приложения записват във файловете с документите, които пишем (docx, xlsx, cdr, и т.н. в зависимост от продукта, с който работим). Когато потребителят изпълни този програмен код, програмата с която работи го стартира чрез своя собствена виртуална машина. Можете да си направите аналогия с изпълнението на програмен код при езици като Java – там се стартира програма наречена „Java виртуална машина“ (JRE), която от своя страна изпълнява байт кода (class файловете), който сме компилирали. При VBA процесът е сходен – стартираме програма (например Word, Excel, PowerPoint,…), която от своя страна изпълнява P-кода, който сме компилирали в защитена среда (подобна на Java виртуалната машина). Още по-добра аналогия може да си направите с JavaScript. JS кода не може да се изпълнява самостоятелно – той трябва да бъде стартиран чрез програмата уеб браузър и да бъде приложен върху конкретна уеб страница. По същият начин VBA кодът се стартира чрез даден софтуерен продукт и се прилага върху конкретен документ. Понеже VBA кодът се изпълнява „вътре в процеса“ на програмата, с която работим, ние спестяваме механизмите за синхронизация между различни процеси в операционната система, с което може да се твърди, че автоматизацията на процеси чрез VBA би следвало да е по-бърза спрямо алтернативни решения.

От тук нататък програмата, от която е стартиран написания от нас VBA код, ще наричаме хост (host application). Стандартно всеки хост предоставя свои собствени библиотеки и програмен интерфейс (API) за взаимодействие с VBA програми. Това означава, че програмите на VBA не може да са универсални – всяка програма се пише с различен код за всеки отделен софтуерен продукт, та дори по същество операциите да са еднакви. Например удебеляването на шрифт в Word от потребителска гледна точка е една и съща по тип операция с удебеляването на шрифт в CorelDraw, но от програмна гледна точка ние не можем механично да пренесем кода на макрос написан за Word директно в CorelDraw, защото програмните интерфейси на двата продукта са напълно различни.

Друго сходство с езиците на програмиране от високо ниво е наличието на автоматичен garbage collector. Когато пишете код с VBA вие не се грижите за заделяне и освобождаване на памет – тези операции се извършват автоматично от виртуалната машина вътре в хоста. По нататък ще разгледаме подробно основните езикови конструкции, след което ще покажем множество практически примери в различни приложения.

 

 



Добави коментар

Адресът на електронната поща няма да се публикува


*