G-M06XE0ZEC1

Макросы VBA. Чем их меньше - тем лучше.

Если вы ходите создать действительно эффективное решение для ведения управленческого учета, то без макросов на языке VBA сделать это невозможно.  Все фирменные юзабилити-фишки решений ExcelSoft, такие как ввод значений через вызов справочника, горячие кнопки, суперфильтр, активное управление вычислениями - все это сделано с помощью макросов. Сделать это только средствами Excel было бы невозможно.

Но в своих программах я стараюсь использовать макросы как можно меньше и  только в подавляющем большинстве случаев для сервисных функций. А все расчеты в программах делаются стандартными функциями  Excel. И вот почему:

  • Основная аудитория сайта ExcelSoft.ru – это специалисты в своем дела, но не они являются программистами на VBA. В случае возникновения проблем с макросами большинство пользователи скорее всего не сможет решить их самостоятельно.
Если в формуле можно посмотреть зависимые и влияющие ячейки, подсветить их цветом, провести к ним стрелочки зависимостей, то в VBA такой возможности нет. А разбираться в чужих алгоритмах дело неблагодарное. 
Чем больше макросов, тем сложнее может быть модернизация программы силами пользователя. Не хочу, что вы зависели от меня, ни от какого либо другого разработчика.

  • По-настоящему надежными являются универсальные макросы, которые в процессе работы не обращаются к конкретным листам рабочей книги, диапазонам, ячейкам. Но такие макросы как правило выполняют сервисные функции (ставить/удалить строку на защищенном листе, заполнить пустоты, создать резервную копию текущего файла и т.п.). 

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

Даже простая перестановка колонок местами, если макрос написан неграмотно, может привести к проблемам. Ведь в отличие от формул, которые автоматически изменяются в случае изменения названий листов и диапазонов, изменения адреса ячеек, ставки/удаления строк и столбцов и т.д., в макросе адреса ячеек и имена диапазонов нужно менять вручную. 

  • Если в результате работы макроса изменилось содержание листов,  в большинстве случает обнуляет стек. То есть пользователь теряет возможность отменить свои действия, выполненные при обычно работе в книге Excel. Порой это очень неудобно. Проблеме отмены действий макроса в ближайшее время будет посвящена отдельная статья.
  • Часто макросы работают значительно медленней, чем стандартные функции Excel. Скажу иначе - быстрые макросы надо уметь писать. Вряд я или вы сможете написать алгоритм сортировки, который будет работать быстрее, чем стандартная сортировка Excel.

По вышеописанным причинам использование макросов в решениях ExcelSoft минимизировано настолько, насколько это возможно. И все равно это около 3 тысяч строк кода. Но без них уже никак. К хорошему быстро привыкаешь.

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

Cookie-файлы
Настройка cookie-файлов
Детальная информация о целях обработки данных и поставщиках, которые мы используем на наших сайтах
Аналитические Cookie-файлы Отключить все
Технические Cookie-файлы
Другие Cookie-файлы
Мы используем файлы Cookie для улучшения работы, персонализации и повышения удобства пользования нашим сайтом. Продолжая посещать сайт, вы соглашаетесь на использование нами файлов Cookie. Подробнее о нашей политике в отношении Cookie.
Понятно Подробнее
Cookies