"Чистка" кода макроса
При автоматической записи макроса в программном коде фиксируются все действия пользователя, отчего код "разбухает" и становится запутанным и трудным для восприятия. Поэтому после записи макроса необходимо "чистить" код, удаляя ненужные команды и оптимизируя его структуру. В результате объем кода может сократиться в несколько раз, при этом он становится значительно легче для понимания и возможной последующей доработки.
В данном уроке показан пошаговый алгоритм "чистки" программного кода от "мусорных" строк. Кроме того, рассматривается конструкция With...End With - ее назначение и структура записи.
зарегистрироваться на сайте
обновите страницу по этой ссылке или кнопкой F5
Комментарии
Урок очень замечательный! Просмотрел свои старые макросы и удивился, сколько там мусора! Будем наводить порядок. Спасибо Вам, Дмитрий, что ведете нас по этому лабиринту Excel.
чистый код, чистая душа!!! спасибо за урок полезно очень
Однако...
Согласен со всеми, кто высказался по поводу урока. Очень полезно и познавательно одновременно!!! Спасибо!!! И со старым Новым Годом!!!
Спасибо! Очень интересные и понятные уроки!
Очень круто!!!
Спасибо, интересно.
Спасибо, очень доступно объясняете
Спасибо, очень интересно и доступно, но приходиться конспектировать.
Большое спасибо, доступно и полезно
Я в восторге! Столько времени потратила на непонятную литературу. А сегодня наткнулась на Ваши уроки и за час просмотра всё стало ясно как божий день!!! Спасибо за то, что Вы делаете!
Спасибо! Никогда не занимался, но стало получаться
Да, все понятно и прозрачно!
Спасибо.
Такого понятного не встречал. Жаль, что нигде не работаю, даже применить негде. Для себя конечно потренируюсь.
Супер-урок!Буду писать и "чистить" Необходимы тренировки
Спасибо за емкие понятные уроки.
Понятно и полезно. Раньше я использовал макрорекордер, но оптимизацией ни разу не занимался. Не знал, как это делать. Теперь буду. Спасибо.
Спасибо большое за педагогический талант и время!
Очень полезный урок, до которого сам "дойдешь" только кровью и потом через какое-то время.
Дмитрий, а возможно ли сделать автозамену?
Например, вместо
".Select
ActiveCell."
поставить "." по всему макросу?
Доброе утро, Ксения.
Попробуйте Но мне кажется, у Вас это не получится из-за символа "перенос строки", которым отделяются слова Select и ActiveCell. Поэтому я это делаю вручную
+
Очень подробно и поэтому понятно. спасибо!!!
очень интересно спасибо, важно макрос
Спасибо, за доступное изложение материала.
Спасибо, очень полезный урок,просто и понятно постараюсь применить на практике
Супер, все быстро и понятно
Меня пугал именно такой длинный и не понятный код макроса, который я просматривал после записи. Теперь я понимаю, что не так страшен черт, как его малюют! ))) Спасибо за это Дмитрию!
Превосходно! Подробно, понятно, всё разложено по полочкам. Спасибо!
Спасибо! Как понятно, пытаюсь проделывать ваши уроки самостоятельно, получается!
Дмитрий!
Не могу понять почему перестает работать макрос после включения защиты листа? При попытке его запуска появляется окно с надписью:
Run-time error '1004'
Aplication-defined or object-defined error
Скорее всего, Ваш макрос пытается изменить содержимое защищенной ячейки. При включенной защите листа такие действия запрещены - как вручную, так и программно. Поставьте в начале макроса команду снятия защиты листа, а в конце - команду ее включения.
Конечно же я снимал защиту с тех ячеек, в которых происходили изменения, но это не помогло. Предложенное Вами решение проблемы мне в голову не приходило. Спасибо! Буду пробовать.
Здорово! Да здравствуют чистые и лаконичные макросы! Так будет работать гораздо быстрее! и макросы гораздо легче прочитать.
Благодарю сердечно. Как будто вынул из ботинок водолазные стельки.
Успехов вам, Дмитрий! И нам также.
Добрый вечер,Дмитрий! Спасибо Вам за эти уроки!
Это раз. А два - вопрос.
Сразу столкнулась с этой проблемой, отложила, а теперь уже деваться некуда, надо решать.
Запись макроса упростила до минимума: передвигаюсь на три ячейки по кругу и меняю заливку. Получаю:
ActiveCell.Offset(0, 3).Range("A1").Select и т.д.
ActiveCell.Offset(-2, 0).Range("A1").Select
С этим не знаю, что делать. Чтобы чистить надо понимать, что здесь написано... Этот Range("A1") везде, куда бы курсор ни ткнула..Не понимаю...
Добрый день, Марина.
Как-то пропустил Ваши комментарии
Касательно ActiveCell.Offset(0, 3).Range("A1").Select - согласен, синтаксис здесь немного запутанный, но разобраться можно.
ActiveCell - это просто активная ячейка (та, что выделена на текущем листе).
Offset(0, 3) - это смещение относительно этой активной ячейки. В данном случае - на 0 строк (т.е. строка остается та же самая) и на 3 ячейки правее.
Теоретически, результатом такого смещения может быть не одна ячейка, а сразу диапазон ячеек - в том случае, если смещение делается относительно выделенного диапазона, а не относительно отдельной ячейки, как у Вас.
Поэтому для того, чтобы показать, что после смещения нас интересует только одна ячейка, в код добавляется указание Range("A1") - оно гарантированно вернет только первую ячейку из смещенного диапазона. В Вашем случае это выражение смысла не имеет (т.к. у Вас и так получается одна ячейка), но и вреда не наносит.
Select в конце указывает, что полученную в результате этих манипуляций ячейку нужно выделить.
Резюме: вся эта длинная конструкция просто выделяет ячейку на 3 столбца правее той, что уже была выделена. Как-то так
Дмитрий! Еще раз от души благодарю за Ваш труд!
И это даже хорошо, что Вы не ответили Пришлось разбираться самой! Оказывается,в Excel2010 много чего интересного... и есть существенные отличия от предыдущих версий... Но с Вашим "путеводителем в кармане" удалось многое преодолеть! С энтузиазмом двигаюсь дальше Спасибо Вам!
Как, и в предыдущих уроках, все понятно и доступно показано. Благодарю, Дмитрий, за ваш труд. Успехов вам.
Спасбо большое, уроки очень нравятся!
Все просто, понятно и доступно. Хочется продолжать смотреть курс и учиться этой сложной науке!
Спс! Просмотрел старые макросы а там...,нужно наводить порядки!
Спасибо, Дмитрий! Всё доступно и понятно. С учетом того, что ранее я с макросами не работала, Ваши видео уроки очень выручили.
Дмитрий, восхищаюсь Вами: умением мыслить, умением так ясно донести свою мысль, вашими увлечениями. Удачи Вам!
Отличные уроки! Спасибо большое автору!
Дмитрий, спасибо за конструктивный и легкий урок. Ваши уроки просто уникальные.
могут только зарегистрированные пользователи.
Ваше имя и тот e-mail, который был указан при регистрации)
В любой момент времени вы можете отказаться от получения сообщений.
Полезно, наглядно, понятно, существенно расширила свои знания благодаря данным урокам - спасибо, Дмитрий)
Добрый день, Анатолий.
Подробнее о создании программы для тестирования было рассказано в специальном платном мастер-классе "Создание программы по тестированию". Приобрести его можно по этой ссылке.
Что касается счетчика времени - в мастер-классе такого функционала не было, но позднее я доработал созданную в нем программу и добавил в нее такой счетчик - при приобретении мастер-класса я вместе с ним предоставлю и доработанную версию программы.
Спасибо! Классно. Где можно списать Вашу программу для шаблона? Счетчик времени на тестирование как вставить?
Здравствуйте. Подскажите, а можно ли сделать Q-код в таблице, но чтоб там было видно наименование упаковки, вес, дата прихода, наименование контрагента и тд. И при каждом изменении данных, автоматически делался Q-код?
Добрый день, Дмитрий. Я случайно увидела ваши видео в ютубе. Посмотрела и мне стало интересно изучить макросы. Перешла по ссылке и просмотрела часть бесплатных видео и мне очень понравилась ваша манера преподавать просто без лишних слов. Скажите, пожалуйста, а как сделать выпадающий...
Здравствуйте В видео "Автоматизация заполнения бланка документа (платежного поручения)" говориться, что можно скачать файлы с макросами, о которых идет речь. Не могу найти. Подскажите, пожалуйста,где скачать Файл?
Благодарю Вас хотя у меня оффис 97 все полчается
здравствуйте, Дмитрий... подскажите пожалуйста такой момент, для того, чтобы сделать макрос с фамилиями, я сделала перечень с фамилиями и суммами.. так вот у меня слово фамилия при сортировке улетает в самый низ))) то есть оно тоже сортируется... что не так в моей таблице?
Спасибо большое.Очень полезная информация
Замечательные уроки, большое спасибо автору. Все очень доходчиво, без лишних заморочек.