Доброго времени суток!

Предыстория – личный опыт

Хочу поделиться своим опытом использования надстроек, которые позволяют автоматизировать процесс разработки макросов в 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 в Excel
Панель инструментов надстройки Macro Tools VBA в Excel
Панель инструментов надстройки Macro Tools VBA в редакторе кода VBE
Панель инструментов надстройки Macro Tools VBA в редакторе кода VBE

В результате разработки надстройки «Macro Tools VBA», удалось реализовать следующие инструменты:

  • настройка шаблона «стиля» кода, по которому будет автоматически выполняться форматирование кода отступами;

Инструмент форматирования кода
Инструмент форматирования кода
  • сниппеты — хранилище готовых шаблонов кода, которые часто используются при написании макросов;

Инструмент использования сниппетов кода
Инструмент использования сниппетов кода
  • автонумерация строк кода;

Инструмент автонумерации строк кода
Инструмент автонумерации строк кода
  • настройка LOG-файлов, процесса выполнения программы VBA;

  • микро подстройка элементов форм;

  • конструкторы процедур, сообщений (MsgBox) и форматов числовых данных;

  • снятие паролей с листов книги Excel и проектов VBA;

  • статистика кодовой базы;

  • и другие инструменты.

Заключение

В результате получился инструмент, не уступающий по функционалу существующим надстройкам, но лишенный недостатков описанных в данной статье.

Кому интересна, надстройка то её можно получить тут: Macro Tools VBA — инструменты разработки макросов VBATools

Для желающих поковыряться в коде GitHub репозитории надстройки: https://github.com/vbatools/MacroToolsVBA

Спасибо за внимание!

Комментарии (27)


  1. economist75
    00.00.0000 00:00

    Хороший инструмент, спасибо! Исходный код пока не смотрел. Было бы здорово, если автору удалось решить проблему с "ложняками" от ESET Endpoint Antivirus и еще парой других антивирусов, распространенных в РФ. В корпоративной среде такой "ложняк" часто становится непреодолимым препятствием. Разработчику гораздо проще организовать попадание своего продукта в white-list, чем пользователям.


    1. VBATools Автор
      00.00.0000 00:00
      +1

      Добрый день! по поводу ложного срабатывания, пробовал избавиться от этого но не помогло. Удалял модули и проверял, выявил случайное срабатывание TotalVirus, не зависящее от модулей. В общем забросил эту идею. Если кого то напрягает это, то может пересобрать надстройку по исходникам из GitHub, там всего около 10 000 строк кода)))


      1. economist75
        00.00.0000 00:00
        +1

        Пересборка из исходников, увы, не отключит ложняки антивируса. А значит на ~половине рабочих мест ваша разработка так и не запустится. Единственный цивилизованный путь решения этой проблемы - обращение автора ПО в антивирусную контору. Avast/Eset/Kaspersky на это реагируют адекватно и относительно быстро. Они просто вычисляют сигнатуру ложняка и добавляют исключающую регулярку.


        1. VBATools Автор
          00.00.0000 00:00

          Хорошо попробую обратиться


        1. VBATools Автор
          00.00.0000 00:00

          Написал во все тех поддержки антивирускников, посмотрим что будет. Так же прогнал у касперскго на сайте - результат все чисто!


  1. Surrogate
    00.00.0000 00:00
    +1

    @VBATools,

    Спасибо за ваш труд! Иногда заимствую код и идеи из вашего гитхаб.

    Огорчает, что комменты на русском превращаются в крокозябры при экспорте в формат bas…


    1. VBATools Автор
      00.00.0000 00:00
      +1

      Спасибо! Очень рад что используют мои инструменты в работе! По кракакзябрам, это хорошая идея для нового инструмента экспорт кода с сохранением кодировки кириллицы!)


  1. baldr
    00.00.0000 00:00

    Зашел поставить минус статье за рекламу, в итоге поставил плюс за опенсорс.

    Сам на VBA редко пишу - больше приходится разбирать уже написанное, но с этим неудобным редактором знаком хорошо.


    1. VBATools Автор
      00.00.0000 00:00
      +1

      Идея и возникла в том что IDE в MS Office осталась на уровне начала века, хотелось добавить больше инструментов. Сейчас пишу код на основе снипетов, как конструктор просто комбинирую, скорость разработки возрастает в разы!


      1. aborouhin
        00.00.0000 00:00

        Не преумаляя достоинств Вашего решения - а не проще / эффективнее ли что-то типа https://xvba-repository.web.app/ - и редактировать VBA в VS Code со всеми его плюшками?


        1. VBATools Автор
          00.00.0000 00:00
          +1

          Смысл этого решения не завесить от другого ПО, разрабатывать только при помощи средств VBA. Любой пользователь мог на своем компе открыть и дописать что ему нужно или починить. На целено на обычных офисных сотрудников у которых нет доступа к другому ПО. И распространяется она как обычный файл Excel, то есть ни чего ни с кем не нужно согласовывать по поводу установки.


          1. aborouhin
            00.00.0000 00:00

            Понятно. Но насколько я видел, обычные пользователи обычно не подозревают о наличии в Word стилей и полей, а уж про то, что там есть какой-то редактор какого-то VBA, им можно рассказывать с таким же успехом, как про теорию струн :) Сидит один гик на весь юридический/финансовый/т.п. департамент, который там что-то пилит, а остальные пользуются плодами, даже близко не подозревая, как оно работает. Сам в такой роли был много лет... А у этого гика VS Code или другая IDE, вероятно, и так стоит.


            1. VBATools Автор
              00.00.0000 00:00

              Очень проблемно сейчас что то установить, нужно писать кучу бумаг, обосновывать ... это очень сложно, тем более сейчас...

              Обычных пользователей, я имел виду макрописцев, про совсем обычных вы правы им не до этого, им нужно - решение, просто одна кнопка и нажал ее задача решена к следующей кнопке. Не штатная ситуация - зови макрописца!) Для них дальнейшее погружение как это работает - лишнее...


              1. aborouhin
                00.00.0000 00:00

                У нас с Вами какие-то разные "сейчас" :)
                В моём с 2020 года половина сотрудников сидит на удалёнке с собственными ноутами, а с 2022 - делает это к тому же ещё и в Грузии/Турции/Тайланде... Понятно, что есть какие-то мастодонты, где до сих пор работают с корпоративного десктопа и доступ во все системы жёстко приколочен гвоздями к конкретному физическому месту. Ну так с них что возьмёшь.


                1. VBATools Автор
                  00.00.0000 00:00

                  Да разное, на моем опыте во всех компаниях что я работал ситуация плюс минус такая: железо компании, ПО тоже, что то установить только через служебную записку и СБ. С системным блоком можно уехать куда угодно но все порты все закрыто, сеть только через шлюзы компании ПКЗИ. Это решение для таких случаев - когда ничего нет, а писать код нужно быстро и качественно!)


        1. economist75
          00.00.0000 00:00

          Проще не будет. VSCode, к сожалению, не отобразит в реальном времени (в коде) действия пользователя в интерфейсе Excel (режим макро-рекордера в MS Basic IDE). Для большинства макрописателей это основной способ постижения довольно большой объектной модели Excel.


  1. aborouhin
    00.00.0000 00:00
    +2

    На vbatools.ru хабраэффект случился :)


    1. VBATools Автор
      00.00.0000 00:00
      +1

      Приветствую! Хостинг сменил условия бесплатного размещения сайта. Установили лимит на запросы. Думаю отказываться от сайта и отставить только на GitHub, либо поискать что то бесплатное) Так как проект open sourse и не коммерческий.

      ВАЖНО, спасибо всем! НО деньги не нужно зачислять на хостинг, проект бесплатный. Лучше посоветуйте хороший бесплатный хостинг.


      1. aborouhin
        00.00.0000 00:00

        Опенсорс - это хорошо, но VBA нынче нужен в основном коммерческим пользователям, которые, думаю, не прочь были бы и задонатить. Если не на жизнь, то уж на хостинг хватит :)

        P.S. Я там Вам на счёт в sprinthost кинул немного... на 1 или 2 года, в зависимости от тарифа, должно хватить :)


        1. VBATools Автор
          00.00.0000 00:00

          Спасибо, честно сайт для меня уже стал обузой - не очень интересно им заниматься, лучше тратить время на VBA и надстройки. Нужно собрать волю и перенести все в файл и полностью уйти на GitHub. Спасибо еще раз!


          1. aborouhin
            00.00.0000 00:00
            -2

            Да не за что :) Я для себя эту стюардессу (VBA) уже закопал :) Но прям вспомнил, как сам в VBA начинал что-то осмысленное (и даже продававшееся) писать 25 лет назад...

            P.S. Ну и не навязываюсь со своими советами, но я бы Ваш впечатляющий опыт в VBA/VB монетизировал таки. Я так понимаю, VBA'шного legacy за пределами нашей родины куда больше, чем в её пределах, и спрос может быть и на платную поддержку, и на доработку отдельных фич по запросу, и на консалтинг.


            1. VBATools Автор
              00.00.0000 00:00
              +2

              В этой надстройке, есть инструмент парсинга строковых переменных, не буду долго расписывать но с помощью его можно любой макрос перевести на любой язык. В том числе и эта настройка переведена на английский. И как итог ее очень активно используют по всему миру. На гите постоянно прилетают сообщения, в основном от заграничных товарищей, с предложениями что, что то работает не так или что то улучшить...))))


    1. VBATools Автор
      00.00.0000 00:00

      Скоро починим сайт через недельку все заработает!)


  1. ArtCapCorn
    00.00.0000 00:00

    Интересно! Надо будет обязательно заценить.

    А менюшка по ПКМ и меню бар тоже из под VBA формируются, если я правильно понял?

    З.Ы. Почему именно такой вариант документации? Чем не подходит VB.net или, на крайняк, rubberduck‘овская реализация?


    1. VBATools Автор
      00.00.0000 00:00
      +1

      Приветствую! да все реализовано на VBA, что бы писать код на VBA. Другие реализации не нравятся тем что нужно еще другое ПО что бы разрабатывать, в этом решение все на VBA. Rubberduck - хорош, но в моем инструменте гораздо больше инструментов!) Как для разработки макросов, так и для реверс инжиниринга чужих макросов!


      1. ArtCapCorn
        00.00.0000 00:00
        +1

        По менюшкам спасибо????, не знал что из под VBA возможно такое. Интересно будет самому попробовать что-то такое.

        Rubberduck - хорош, но в моем инструменте гораздо больше инструментов!

        Та я не о том, что RD лучше или хуже, а о том, почему выбран кастомный вариант документации к методам? :) есть каноничный, как мне кажется, вариант от vb.net (тоже, что и в C#). Каноничный, потому что VB, все таки. Мне кажется большинство разрабатываемых вещей правильнее было бы заимствовать оттуда.

        Вариант от RD хоть и не канон, но по сути показывает документацию такой, какой она по факту является (которая через F2 вызывается).

        Не то, чтобы я сильно против кастомных вариантов, но в VBA и так слишком много разнообразия от разработчиков, хотелось бы, чтобы подобные решения показывали пример единообразия. Сам, когда выбирал каким образом формировать документацию методов сначала придумал свой вариант (такой аналог python документации). Но я тогда не знал, как еще это можно делать и взять ближайший пример, который был перед глазами.

        Собственно, просто интересно, почему было выбрано самописное строение документации, а не взят какой-нибудь готовый пример ????


        1. VBATools Автор
          00.00.0000 00:00

          Да, с этим проблема, технический долг есть..., нужно комментарий прописать будет ко всем методам и функциям в коде. Сейчас есть инструмент который выгружает статистику кодовой базы, названия методов, количества строк. Нужно будет сделать что бы выгружались и комментарии к коду. Тогда будет авто документирование кода - работать!)