Макросы VBA. Чем их меньше - тем лучше.
Если вы ходите создать действительно эффективное решение для ведения управленческого учета, то без макросов на языке VBA сделать это невозможно. Все фирменные юзабилити-фишки решений ExcelSoft, такие как ввод значений через вызов справочника, горячие кнопки, суперфильтр, активное управление вычислениями - все это сделано с помощью макросов. Сделать это только средствами Excel было бы невозможно.
Но в своих программах я стараюсь использовать макросы как можно меньше и только в подавляющем большинстве случаев для сервисных функций. А все расчеты в программах делаются стандартными функциями Excel. И вот почему:
- Основная аудитория сайта ExcelSoft.ru – это специалисты в своем дела, но не они являются программистами на VBA. В случае возникновения проблем с макросами большинство пользователи скорее всего не сможет решить их самостоятельно.
Если в формуле можно посмотреть зависимые и влияющие ячейки, подсветить их цветом, провести к ним стрелочки зависимостей, то в VBA такой возможности нет. А разбираться в чужих алгоритмах дело неблагодарное.
Чем больше макросов, тем сложнее может быть модернизация программы силами пользователя. Не хочу, что вы зависели от меня, ни от какого либо другого разработчика.
- По-настоящему надежными являются универсальные макросы, которые в процессе работы не обращаются к конкретным листам рабочей книги, диапазонам, ячейкам. Но такие макросы как правило выполняют сервисные функции (ставить/удалить строку на защищенном листе, заполнить пустоты, создать резервную копию текущего файла и т.п.).
Если макросы не универсальные, то они надежно работают пока ничего не трогаешь. Но когда ты начинаешь удалять или переименовывать листы, диапазоны или ячейки, то можешь изменить те, к которым обращается макрос. В результате программа пытается обратиться к несуществующему листу, диапазону или ячейке и останавливается, либо отрабатывает некорректно.
Даже простая перестановка колонок местами, если макрос написан неграмотно, может привести к проблемам. Ведь в отличие от формул, которые автоматически изменяются в случае изменения названий листов и диапазонов, изменения адреса ячеек, ставки/удаления строк и столбцов и т.д., в макросе адреса ячеек и имена диапазонов нужно менять вручную.
- Если в результате работы макроса изменилось содержание листов, в большинстве случает обнуляет стек. То есть пользователь теряет возможность отменить свои действия, выполненные при обычно работе в книге Excel. Порой это очень неудобно. Проблеме отмены действий макроса в ближайшее время будет посвящена отдельная статья.
- Часто макросы работают значительно медленней, чем стандартные функции Excel. Скажу иначе - быстрые макросы надо уметь писать. Вряд я или вы сможете написать алгоритм сортировки, который будет работать быстрее, чем стандартная сортировка Excel.
По вышеописанным причинам использование макросов в решениях ExcelSoft минимизировано настолько, насколько это возможно. И все равно это около 3 тысяч строк кода. Но без них уже никак. К хорошему быстро привыкаешь.
Радует только, что в значительной части это набор одних и тех же макросов, кочующих из программы в программу. Часть из них мы разберем в отдельных статьях.