Пример от практиката: Изчисляване на платена отпуска

Безплатни 20 урока
регистрирай се и научи

Ако сте вече потребител - Регистриран съм
Видео

Въпроси и отговори

  • Защо да използвам VBA, след като до тук видяното може да се постигне и само с Excel?

    Ана Йонкова:

    По средата на курса този въпрос сигурно е малко тъп, но ми се струва, че ако човек отлично познава Excel не му е нужен VBA. Времето, което му е нужно да направи формулите в Excel не е по-дълго от това да програмира на VBA.

    Димитринка Вълкова:

    Ана, благодаря за въпроса! Така е, в Excel има изключително богати и полезни възможности. Но в ежедневната работа се налага (понякога често или от време на време) да се извършват повтарящи се рутинни действия, за които не се изискват кой знае какви умения, но трябва да се изпълнят с голяма прецизност. Например: изчистване на първоначалните данни и подреждането на данните в таблици, удобни за анализ, задаване на един и същ формат на повече работни листа, автоматично актуализиране на данни в обобщаващите таблици (pivot tables) и построяване на диаграми, създаване на потребителски функции със сложни формули, автоматично импортиране на данни в останалите приложения на MS Office, изпращане на имейли. Към този списък може да се добавят още и още приложения на VBA. Но тук искам да посоча две много важни предимства на VBA: прецизност в изпълнението и пестене на време. Разбира се, не е задължително на всяка цена да се използва VBA. От опит зная, че в ежедневната работа понякога се намират по-добри решения с инструментите на Excel без да се прилага програмен код.

    Димитринка Вълкова:

    Но тъй като курсът е VBA за Excel искам да споделя следните случаи от практиката ми през изминалия месец: 1. Тук, във форума беше поставен въпросът как да се изчислява извънреден труд. За да се получи коректен резултат, във формулата трябваше да се включат няколко проверки с IF. Аз стигнах до 7 вложени IF-а, и въпреки това не успях да включа всички варианти. Другото решение беше с междинни резултати, т.е. да се добавят няколко колони, но това решение също не дава коректни резултати. В случая единственото решение беше да напише потребителска функция (UDF), която изчислява извънредния труд като се въведат само 2 аргумента: начало и край на работното време. Изчисленията са коректни, а освен това ценното на UDF е, че се използва често и не е необходимо всеки път да се въвеждат отново и отново тези сложни формули. 2. Споделено от счетоводител от курса в Аула, която е използвала VBA: "... оборотна ведомост с мемориален ордер, която определя автоматично мястото на началното салдо, с критерий вида на сметката (активна или пасивна). Преизчислява оборотите при всяка добавяна стоп. операция и показва крайно салдо. Също така сумира обща балансова и задбалансова сума и всичко ... " 3. Преди 2 седмици на едно представяне за възможностите на VBA, се поставиха 2 въпроса, които искам да споделя: - Как да се автоматизира "включване/изключване" на условно форматиране. Моето решение, без никакъв програмен код, изненада присъстващите. Ето още едно потвърждение за богатите възможности на Excel. - Другият въпрос беше свързан как да се актуализира обобщаващата таблица (pivot table). Проблемът се оказа, че забравят всеки път да натискат бутон Refresh. Този път решението беше с 3 реда инструкции на VBA, с които автоматично се актуализират данните всеки път, когато се активира листа с pivot table. Мога да продължа с още много примери от моята практика, с които непрекъснато се сблъсквам. С написаното искам да подчертая, че всяко нещо си има своето място и приложение, а вярното решение е това решение, което дава коректен резултат, няма грешки и пести време! Надявам се, че успях да отговоря на въпроса.

    Ана Йонкова:

    Благодаря, за изчерпателния и много убедителен отговор! Въпреки, че Excel ми се струва по-лесен, ще положа усилие да усвоя и VBA. Работата ми е свързана с попълване на таблици и се надявам да открия ползата от VBA за мен самата.

    Силвия Данаилова:

    В подкрепа на думите на Димитринка Вълкова, аз също ще споделя голямата полза от VBA за мен. Всеки месец обработвам огромни справки, които не изискват много добри познания по Excel, но поради спецификата на суровите данни и крайната справка, ръчната им обработка отнема поне 3-4 дни. С VBA справките стават за по около минута всяка - средно 10 на брой, т.е. около 10 минути. Наистина кода е много сложен и комплексен, обхваща много хипотези... Написването му ми отне около 1 месец, но определено отделеното време си заслужаваше. Вече няма неволни технически грешки. Голяма част от зависимостите и отклоненията, които търсех на око или с допълнителни справки след ръчната обработка се извеждат автоматично.

    С две думи резултатът е - точност, отсъствие на досадната повтаряема работа, освободено време за анализ и други по-продуктивни занимания.

    Diana Siteva:

    Нямаш представа колко работа ми спестява VBA. Понякога ми е като предизвикателство да програмирам нещата да стават по-бързо. Не си представям справките, които работя, без макроси.

    Kocho:

    Макросите са полезни, НО имат два много коварни капана.

    Първият е, че правят само това, което им е казано да правят и не проявяват творчество при промяна в ситуацията. Например, ако макросът трябва да сортира числата в клетки А1:А10000 по възходящ ред, ще го направи за част от секундата или ще го прави хиляди пъти без умора. Но ако някой по грешка попълни числата в колона В - макросът няма да се промени сам. Няма и да върне грешка.

    А вторият е, че обикновено няколко месеца след написването на макроса се забравя кое как и за какво е направено. И при нужда от промяна възникват усложнения. Особено, когато макросът е писан от някой друг.

    Разбира се, има добри практики на писане (и ползване) на макроси, които спестяват голяма част от главоболията, свързани с тези капани. Но 100% сигурност няма.

    Затова аз предпочитам да минимизирам употребата на макроси с други средства на Ексел.

    Що се касае за обработката на неподредени файлове и привеждането им във вид, удобен за изготвяне на отчети и анализ, Майкрософт са създали чудесен инструмент, който за мнозина е потенциален "убиец на макроси" - PowerQuery

    Димитринка Вълкова:

    Power Query е следващата стъпка, много и изключително полезна! Но се получава ефекта на малките камъчета, които обръщат колата, или с други думи малката дупка води право към пропастта. Искам да кажа всяко знание и умение, колкото и малко да е, рано или късно се оказва безценно :-)

    Антон:

    Kocho, в математиката 2+2=4, ако замениш или премахнеш символ в резултат няма да получиш нищо или ще е грешно. Та за макросите. С тяхна помощ винаги ще имаш еднакво решение на заданието, те не само ще обработят задачата мигновено, но и ще гарантират еднаква логика=еднакви данни в края. Колкото по-вече знаеш и умееш, толкова по голяма полза ще има за теб. Имам макроси от по 100-тина страници и ми спестяват часове работа на единица работник и гарантират ЕДНАКВИ крайни документи.

    Зад всеки бутон стои код.

    Kocho:

    @ Антон: "за макросите. С тяхна помощ винаги ще имаш еднакво решение на заданието, те не само ще обработят задачата мигновено, но и ще гарантират еднаква логика=еднакви данни в края."

    Не винаги, друже, не винаги. Достатъчно е примерно ИТ отдела да подмени сървъра с по-голям, по-мощен по-такъв и по-онакъв, който обаче в корпоративната ти директория се вижда като устройство H, а макросът ти търси файлове на устройство F. Или счетоводният отдел да открие нова счетоводна сметка за приходите, която не е описана в макроса. Или пък държавата да въведе нов данък, такса, ново изискване за подаване на информация. Или пък вендорът на ИТ системата като оправи един бъг да вземе да смени формата на експортираните данни и числата по-големи от 999,99 да излизат с разделител, а булстатът на клиентите вече да не е long integer, а текст.

    Само едно такова нещо може или да накара макроса да спре някъде, или да си направи неговото, но с грешен краен резултат.

    И ако макросът е 100 страници писан от незнаен специалист, напуснал банката години преди ти да постъпиш - иди, че се оправи.

    Всичко това са реални казуси от моята практика, с които не отричам макросите, напротив - знам, че са изключително полезни. Но и трябва да се внимава как се пишат и как се ползват.