Доброго времени суток!
Предыстория – личный опыт
Хочу поделиться своим опытом использования надстроек, которые позволяют автоматизировать процесс разработки макросов в Visual Basic Editor MS Excel (далее VBE). В результате которого я разработал свою надстройку для разработки макросов VBA.
В процессе работы с существующими «com» — надстройками (Smart Indenter, VBE Tools, Invisible Basic), столкнулся со следующими трудностями:
отсутствие возможности пользователю самому управлять процессом установки и удаления надстройки не имеющих прав администратора. Иногда приходится работать за несколькими компьютерами и бывает необходимость оперативно установить надстройку без дополнительных согласований с администратором.
ограниченный функционал — зачастую, в существующих надстройках используется один или два инструмента, что создает необходимость устанавливать дополнительные надстройки. Что также вызывает трудность, описанную в первом пункте.
отсутствие версий надстроек, совместимых с 64 bit версиями MS Excel, что создает ограничение в использовании либо MS Excel 64 bit либо надстройки.
большинство надстроек остались в далеком прошлом, и на текущий момент не поддерживаются авторами.
По полученному личному опыту использования надстроек был сформирован перечень свойств, которыми должна обладать надстройка для MS Excel VBA:
должна быть конструктором — давать пользователю возможность самому расширять или сокращать функционал надстройки
поддерживать все версии MS Excel, в том числе 32 и 64 — разрядные
установка и удаление без участия администратора
открытый исходный код — с точки безопасности, хочется знать, что там внутри!
По функционалу хотелось получить надстройку способную, не много, приблизить VBA к современным средам разработки (IDE). А именно автоматическое форматирование стиля кода, авто нумерация строк кода, использование сниппетов при написании кода.
Разработка надстройки
Разработанная надстройка имеет следующие преимущества, по сравнению с другими инструментами разработки в VBA:
Параметры |
xlam |
com |
дополнительное ПО при изменении кода надстройки |
не нужно |
нужно |
самостоятельная установка без прав администратора |
да |
нет |
поддержка версии Excel 32 bit и 64 bit |
один установочный файл |
два установочных файла |
знание дополнительных ЯП |
не нужно |
нужно |
создание диалоговых окон для редактора VBE |
нет |
да |
Создание «горячих клавиш» для редактора VBE |
Решено с использование AutoHotkey, написана подключаемая dll |
да |
Так же для использования преимуществ «com» надстроек был разработан модуль подключения различных «dll» библиотек, которые значительно расширяют данную надстройку. Но несут ограничения, описанные выше.
В итоге получилась надстройка «конструктор», в которой функционал легко расширяется как инструментами встроенными MS Excel, так и «dll» библиотеками. Что позволяет легко комбинировать нужный функционал надстройки.
В процессе разработки использовался: Ribbon XML Editor — редактор XML файлов интерфейса, инструмент для создания собственной вкладки в ленте MS Excel со встроенным редактором кода VBA.
ИТОГ: Надстройка – Macro Tools VBA
В результате разработки надстройки «Macro Tools VBA», удалось реализовать следующие инструменты:
настройка шаблона «стиля» кода, по которому будет автоматически выполняться форматирование кода отступами;
сниппеты — хранилище готовых шаблонов кода, которые часто используются при написании макросов;
автонумерация строк кода;
настройка LOG-файлов, процесса выполнения программы VBA;
микро подстройка элементов форм;
конструкторы процедур, сообщений (MsgBox) и форматов числовых данных;
снятие паролей с листов книги Excel и проектов VBA;
статистика кодовой базы;
и другие инструменты.
Заключение
В результате получился инструмент, не уступающий по функционалу существующим надстройкам, но лишенный недостатков описанных в данной статье.
Кому интересна, надстройка то её можно получить тут: Macro Tools VBA — инструменты разработки макросов VBATools
Для желающих поковыряться в коде GitHub репозитории надстройки: https://github.com/vbatools/MacroToolsVBA
Спасибо за внимание!
Комментарии (27)
Surrogate
00.00.0000 00:00+1Спасибо за ваш труд! Иногда заимствую код и идеи из вашего гитхаб.
Огорчает, что комменты на русском превращаются в крокозябры при экспорте в формат bas…
VBATools Автор
00.00.0000 00:00+1Спасибо! Очень рад что используют мои инструменты в работе! По кракакзябрам, это хорошая идея для нового инструмента экспорт кода с сохранением кодировки кириллицы!)
baldr
00.00.0000 00:00Зашел поставить минус статье за рекламу, в итоге поставил плюс за опенсорс.
Сам на VBA редко пишу - больше приходится разбирать уже написанное, но с этим неудобным редактором знаком хорошо.
VBATools Автор
00.00.0000 00:00+1Идея и возникла в том что IDE в MS Office осталась на уровне начала века, хотелось добавить больше инструментов. Сейчас пишу код на основе снипетов, как конструктор просто комбинирую, скорость разработки возрастает в разы!
aborouhin
00.00.0000 00:00Не преумаляя достоинств Вашего решения - а не проще / эффективнее ли что-то типа https://xvba-repository.web.app/ - и редактировать VBA в VS Code со всеми его плюшками?
VBATools Автор
00.00.0000 00:00+1Смысл этого решения не завесить от другого ПО, разрабатывать только при помощи средств VBA. Любой пользователь мог на своем компе открыть и дописать что ему нужно или починить. На целено на обычных офисных сотрудников у которых нет доступа к другому ПО. И распространяется она как обычный файл Excel, то есть ни чего ни с кем не нужно согласовывать по поводу установки.
aborouhin
00.00.0000 00:00Понятно. Но насколько я видел, обычные пользователи обычно не подозревают о наличии в Word стилей и полей, а уж про то, что там есть какой-то редактор какого-то VBA, им можно рассказывать с таким же успехом, как про теорию струн :) Сидит один гик на весь юридический/финансовый/т.п. департамент, который там что-то пилит, а остальные пользуются плодами, даже близко не подозревая, как оно работает. Сам в такой роли был много лет... А у этого гика VS Code или другая IDE, вероятно, и так стоит.
VBATools Автор
00.00.0000 00:00Очень проблемно сейчас что то установить, нужно писать кучу бумаг, обосновывать ... это очень сложно, тем более сейчас...
Обычных пользователей, я имел виду макрописцев, про совсем обычных вы правы им не до этого, им нужно - решение, просто одна кнопка и нажал ее задача решена к следующей кнопке. Не штатная ситуация - зови макрописца!) Для них дальнейшее погружение как это работает - лишнее...
aborouhin
00.00.0000 00:00У нас с Вами какие-то разные "сейчас" :)
В моём с 2020 года половина сотрудников сидит на удалёнке с собственными ноутами, а с 2022 - делает это к тому же ещё и в Грузии/Турции/Тайланде... Понятно, что есть какие-то мастодонты, где до сих пор работают с корпоративного десктопа и доступ во все системы жёстко приколочен гвоздями к конкретному физическому месту. Ну так с них что возьмёшь.VBATools Автор
00.00.0000 00:00Да разное, на моем опыте во всех компаниях что я работал ситуация плюс минус такая: железо компании, ПО тоже, что то установить только через служебную записку и СБ. С системным блоком можно уехать куда угодно но все порты все закрыто, сеть только через шлюзы компании ПКЗИ. Это решение для таких случаев - когда ничего нет, а писать код нужно быстро и качественно!)
economist75
00.00.0000 00:00Проще не будет. VSCode, к сожалению, не отобразит в реальном времени (в коде) действия пользователя в интерфейсе Excel (режим макро-рекордера в MS Basic IDE). Для большинства макрописателей это основной способ постижения довольно большой объектной модели Excel.
aborouhin
00.00.0000 00:00+2На vbatools.ru хабраэффект случился :)
VBATools Автор
00.00.0000 00:00+1Приветствую! Хостинг сменил условия бесплатного размещения сайта. Установили лимит на запросы. Думаю отказываться от сайта и отставить только на GitHub, либо поискать что то бесплатное) Так как проект open sourse и не коммерческий.
ВАЖНО, спасибо всем! НО деньги не нужно зачислять на хостинг, проект бесплатный. Лучше посоветуйте хороший бесплатный хостинг.
aborouhin
00.00.0000 00:00Опенсорс - это хорошо, но VBA нынче нужен в основном коммерческим пользователям, которые, думаю, не прочь были бы и задонатить. Если не на жизнь, то уж на хостинг хватит :)
P.S. Я там Вам на счёт в sprinthost кинул немного... на 1 или 2 года, в зависимости от тарифа, должно хватить :)VBATools Автор
00.00.0000 00:00Спасибо, честно сайт для меня уже стал обузой - не очень интересно им заниматься, лучше тратить время на VBA и надстройки. Нужно собрать волю и перенести все в файл и полностью уйти на GitHub. Спасибо еще раз!
aborouhin
00.00.0000 00:00-2Да не за что :) Я для себя эту стюардессу (VBA) уже закопал :) Но прям вспомнил, как сам в VBA начинал что-то осмысленное (и даже продававшееся) писать 25 лет назад...
P.S. Ну и не навязываюсь со своими советами, но я бы Ваш впечатляющий опыт в VBA/VB монетизировал таки. Я так понимаю, VBA'шного legacy за пределами нашей родины куда больше, чем в её пределах, и спрос может быть и на платную поддержку, и на доработку отдельных фич по запросу, и на консалтинг.
VBATools Автор
00.00.0000 00:00+2В этой надстройке, есть инструмент парсинга строковых переменных, не буду долго расписывать но с помощью его можно любой макрос перевести на любой язык. В том числе и эта настройка переведена на английский. И как итог ее очень активно используют по всему миру. На гите постоянно прилетают сообщения, в основном от заграничных товарищей, с предложениями что, что то работает не так или что то улучшить...))))
ArtCapCorn
00.00.0000 00:00Интересно! Надо будет обязательно заценить.
А менюшка по ПКМ и меню бар тоже из под VBA формируются, если я правильно понял?
З.Ы. Почему именно такой вариант документации? Чем не подходит VB.net или, на крайняк, rubberduck‘овская реализация?
VBATools Автор
00.00.0000 00:00+1Приветствую! да все реализовано на VBA, что бы писать код на VBA. Другие реализации не нравятся тем что нужно еще другое ПО что бы разрабатывать, в этом решение все на VBA. Rubberduck - хорош, но в моем инструменте гораздо больше инструментов!) Как для разработки макросов, так и для реверс инжиниринга чужих макросов!
ArtCapCorn
00.00.0000 00:00+1По менюшкам спасибо????, не знал что из под VBA возможно такое. Интересно будет самому попробовать что-то такое.
Rubberduck - хорош, но в моем инструменте гораздо больше инструментов!
Та я не о том, что RD лучше или хуже, а о том, почему выбран кастомный вариант документации к методам? :) есть каноничный, как мне кажется, вариант от vb.net (тоже, что и в C#). Каноничный, потому что VB, все таки. Мне кажется большинство разрабатываемых вещей правильнее было бы заимствовать оттуда.
Вариант от RD хоть и не канон, но по сути показывает документацию такой, какой она по факту является (которая через F2 вызывается).
Не то, чтобы я сильно против кастомных вариантов, но в VBA и так слишком много разнообразия от разработчиков, хотелось бы, чтобы подобные решения показывали пример единообразия. Сам, когда выбирал каким образом формировать документацию методов сначала придумал свой вариант (такой аналог python документации). Но я тогда не знал, как еще это можно делать и взять ближайший пример, который был перед глазами.
Собственно, просто интересно, почему было выбрано самописное строение документации, а не взят какой-нибудь готовый пример ????
VBATools Автор
00.00.0000 00:00Да, с этим проблема, технический долг есть..., нужно комментарий прописать будет ко всем методам и функциям в коде. Сейчас есть инструмент который выгружает статистику кодовой базы, названия методов, количества строк. Нужно будет сделать что бы выгружались и комментарии к коду. Тогда будет авто документирование кода - работать!)
economist75
Хороший инструмент, спасибо! Исходный код пока не смотрел. Было бы здорово, если автору удалось решить проблему с "ложняками" от ESET Endpoint Antivirus и еще парой других антивирусов, распространенных в РФ. В корпоративной среде такой "ложняк" часто становится непреодолимым препятствием. Разработчику гораздо проще организовать попадание своего продукта в white-list, чем пользователям.
VBATools Автор
Добрый день! по поводу ложного срабатывания, пробовал избавиться от этого но не помогло. Удалял модули и проверял, выявил случайное срабатывание TotalVirus, не зависящее от модулей. В общем забросил эту идею. Если кого то напрягает это, то может пересобрать надстройку по исходникам из GitHub, там всего около 10 000 строк кода)))
economist75
Пересборка из исходников, увы, не отключит ложняки антивируса. А значит на ~половине рабочих мест ваша разработка так и не запустится. Единственный цивилизованный путь решения этой проблемы - обращение автора ПО в антивирусную контору. Avast/Eset/Kaspersky на это реагируют адекватно и относительно быстро. Они просто вычисляют сигнатуру ложняка и добавляют исключающую регулярку.
VBATools Автор
Хорошо попробую обратиться
VBATools Автор
Написал во все тех поддержки антивирускников, посмотрим что будет. Так же прогнал у касперскго на сайте - результат все чисто!