...
...

Как бороться с программированием

Как бороться с программированием

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

Я попробую показать, как это делается. Уверяю, сие вовсе не столь сложно, как кажется, и даже становится увлекательным занятием, как только удается преодолеть первый барьер и составленная программа, наконец, начинает работать, как задумано автором. Единственное, что для этого нужно, это строго придерживаться системного подхода и четко представлять с самого первого шага, что и каким образом должно быть сделано. Следует помнить, что персональный компьютер ни черта в программах не понимает и просто механически выполняет передаваемые ему инструкции. Это означает, что если вы хотите получить от него некий осмысленный результат, то должны изложить методику работы таким образом, чтобы у персонального компьютера не возникло ни малейших неоднозначностей. И тогда все пойдет, как по маслу.

Чтобы объяснить, каким образом можно "дорабатывать" автоматически генерируемый макрос, я воспользуюсь тем же примером, с которым мы экспериментировали в прошлый раз . Напомню, мы рассматривали теоретическую ситуацию, когда к вам каждый день поступают файлы электронной таблицы, содержащие некий перечень покупок, который требуется приводить к единому виду. С помощью макрорекордера все необходимые операции были записаны в виде программы и сохранены в текущей книге под именем " Макрос1".

А теперь допустим, что ваша обязанность несколько шире. Кроме простого форматирования, вам требуется получить графу " Итого", которая бы содержала общую сумму конкретной покупки, то есть сумму всего, что содержится в столбце " Стоимость". Увы, макрорекордер вам тут не помощник, так как он не понимает таких естественных для человека терминов, как "поставить нечто после всех значащих ячеек" и так далее. Если вы попробуете вставить " Итого" на должное место В ДАННОЙ таблице, то Microsoft Excel сгенерирует программу, в которой суммирование будет располагаться в ячейке с постоянным адресом. Такая программа будет успешно работать лишь до тех пор, пока в обрабатываемой таблице значащих строк будет столько же или меньше, чем тогда, когда будет записан данный макрос. Если же строк окажется больше, то неизбежно все остальные программа просто проигнорирует.

Тут и начинается творчество, связанное с написанием программы. Первое, что необходимо обдумать, это смысл предполагаемого действия. Если итоговый результат вообще никогда и ни при каких условиях не будет в дальнейшем использован для каких-либо других автоматических операций, то приоритетным условием становится красота оформления, и тут желательно соблюсти каноны обычного стиля, принятого в таблицах, когда любая сумма располагается ПОД СТОЛБЦОМ или В КОНЦЕ СТРОКИ с суммируемыми величинами. Если же не исключается, что впоследствии результаты могут быть затребованы какой-нибудь другой задачей, то на первое место выдвигается не красота, а функциональность. Это означает, что потом будет куда проще и удобнее, если местоположение исходных данных всегда останется неизменным, независимо от размеров исходной таблицы. Таким образом получается, что в данном случае графу " Итого" рациональнее всего располагать не под столбцом, а над ним. Тогда сколько бы единиц товаров ни было куплено, их общая стоимость всегда будет расположена в одном и том же месте, что не потребует впоследствии написания специализированного модуля, который бы занимался поиском ячейки " Итого" в каждой таблице. Последнее к тому же еще и проще реализовать.

Исходя из вышесказанного, вытекает необходимость реализовать следующую задачу. После окончания цикла форматирования программа должна всегда выполнять следующую последовательность действий: над первой строкой таблицы вставить одну пустую строку; в ячейке D1 ввести слово "Итого" как идентификатор; в ячейку Е1 ввести формулу суммирования таким образом, чтобы сложению подлежало все, что ниже второй строки, так как иначе формула попытается просуммировать и текстовое содержимое ячейки Е2, что неизбежно приведет к ошибке. Вообще-то, идеальным решением было бы создать модуль, который самостоятельно определял бы диапазон ячеек столбца Е, содержащий числовые величины. Однако я не ставлю целью показать все возможности встроенного языка Visual Basic, поэтому предлагаю менее изящное, но более простое решение. Одна таблица Microsoft Excel не резиновая и более четырнадцати тысяч строк содержать не может. Честно говоря, максимальный размер таблицы вычисляется по довольно-таки длинной формуле, учитывающей ее содержимое, вид и способ форматирования, наличие комментариев и прочих радостей жизни. Однако, если не вдаваться в тонкости, то пределом является четырнадцать тысяч строк. С другой стороны, если предположить, что подлежащие обработке таблицы содержат перечень разовых покупок одного частного лица, то трудно предположить, что рубеж в четырнадцать тысяч строк будет когда-либо преодолен. Стало быть, диапазон Е3:Е14000 вполне перекрывает все потребности, что нам и нужно.

Теперь, когда стали ясными не только цель, но и путь ее достижения, можно приступить к реализации замысла. Исходный макрос у меня уже есть, он остался с прошлого раза. Для того чтобы его активизировать, нужно воспользоваться командой "МАКРОСЫ", режима "МАКРОС", меню "СЕРВИС" . Это активизирует список имеющихся макросов, в котором надлежит выделить нужный и нажать экранную кнопку " Войти". Это активизирует встроенный редактор Visual Basic, в рабочем окне которого автоматически будет загружен исходный текст указанного макроса.

В этом окне написано много всяких маловразумительных закорючек, разобраться в которых сходу не удастся. Да и пытаться сделать сие не стоит, если только вы не лелеете втайне мечту стать программистом. Достаточно прокрутить весь текст и вставить пустую строку перед заключительным оператором END в конце программы. Теперь можно опять воспользоваться встроенным макрорекордером. Стандартным образом (СЕРВИС/МАКРОС/НАЧАТЬ ЗАПИСЬ) имеет смысл начать запись нового макроса (можно даже не менять имя, присвоенное по умолчанию). Как я уже рассказывал, после запуска макрорекордера нужно проделать описанные выше шаги в строгом соответствии с приведенным порядком: 1) Выделить первую строку; 2) Вставить новую строку; 3) В ячейке D1 набрать "Итого:"; 4) В ячейке Е1 ввести формулу "=сумм(Е3:Е14000)". По окончанию этих действий можно остановить макрорекордер, он свое дело сделал.

Итак, у нас есть два макроса, являющиеся частями одного большого замысла. Остается лишь соединить их и получить законченную программу. Перейдем в окно Visual Basic и активизируем Макрос2. Это несложно. В левом верхнем окне редактора находится список всех макросов данной книги. Найдите в нем Макрос2 и дважды кликните по нему. Это откроет справа еще одно окно с его исходным текстом. Выделите все команды, расположенные после окончания комментария (это текст, набранный зеленым шрифтом) и до заключительного END в конце. Сам END выделять не надо, так как маркер конца программы в Макрос1 уже есть. Потом перейдите опять в окно исходного кода программы Макрос1 и вставьте скопированный из Макрос2 фрагмент в ту пустую строку, которую создали перед заключительным END. Можно сказать, почти все уже сделано. Остается сохранить новый текст макроса с помощью режима "СОХРАНИТЬ" из меню "ФАЙЛ".

Само собой, работу нужно проверить. Перейдите обратно в таблицу Microsoft Excel, с которой работаете, и удалите первую строку, которая была создана во время работы макрорекордера. В итоге она должна вернуться к исходному состоянию . Таким образом у нас есть первоначальная ситуация, когда файл имеет тот вид, в котором он будет попадать вам в руки. Остается запустить на выполнение Макрос1 (меню "СЕРВИС", режим "МАКРОС", команда "МАКРОСЫ"). Теперь в списке макросов Microsoft Excel покажет два имени, из которых нас интересует лишь первое. Выделите Макрос1 и нажмите экранную кнопку " Выполнить". Созданная вами инструкция должна сработать и привести исходную таблицу к законченному виду . Если у вас все прошло без сбоев, то Макрос2 за ненадобностью можно и удалить, а Макрос1 оставить в качестве удобного инструмента.

Как видите, ничего особо сложного в модернизации макросов нет. В дальнейшем, если вам понравится, стоит детально ознакомиться с командами встроенного Visual Basic, ну если не со всеми, то хотя бы с теми, которые собраны в мастере функций Microsoft Excel. С их помощью можно придумать самые фантастические вещи, было бы желание и фантазия.

Александр Запольскис E-mail: leshy@nestor.minsk.by - титульная страница


© Компьютерная газета

полезные ссылки
Ремонт ноутбуков в центре Минска