Забыли пароль?


MulTEx »

Удаление макросов из активной книги

Данная функция является частью надстройки MulTEx

MulTEx

Вызов команды:
MulTEx -группа Книги/Листы -Книги -Удаление макросов


Команда удаляет выбранные компоненты(модули, процедуры, функции) VBA проекта. Когда это может пригодится? Например, если в файле сначала было создано несколько макросов для обработки отчета. Но после обработки отчет необходимо отправить без макросов. Если все они находятся в одном модуле - это не проблема. Но если коды раскиданы по разным модулям, плюс еще есть Пользовательские формы(UserForm), Модули классов(ClassModule) и коды в листах - времени может потребоваться немало. Так же есть и другой вариант: файл прислали по почте и в него необходимо вносить какие-либо изменения, но в файле макросы, которые мешают делать это корректно и удобно(например, в файле есть обработки событий и т.п.).
Помимо этого в команде есть еще одна удобная возможность - удалять только те модули, в которых нет ни одной полезной строки кода(т.е. нет ни объявления переменных и констант, ни процедур, ни функций - словом, никаких "нужных" макросов). В дополнение такие модули помечаются неактивной иконкой и сразу можно понять, есть ли какие-то рабочие коды в модуле или нет.
Так же команда может пригодиться тем, кто плохо знаком с макросами и не знает где их искать и как удалять, но удалить их все же надо.
Команда представляет собой форму с удобной схемой всех VBA модулей и процедур в них:
MulTEx - Удалить макросы из книги

Пустые модули(без значащих строк кода) отображены на схеме неактивной(серой) иконкой. Пустыми считаются те модули, в которых нет ни одной значащей строки кода.
Значащими строками кода считаются:

  • любые процедуры и функции
  • строки объявления переменных и констант, пользовательских типов, функций API и т.п.(Dim, Const, Public, Private, Static, Type, Declare и т.п.)

Если в модуле есть строки деклараций (Option Explicit, Option Compare Text, Option Private Module, Option Base, а так же DefType) и/или комментарии, но кроме них нет ни одной значащей строки кода, то такие модули тоже будут считаться пустыми.

В самом верхнем уровне идут 4 основных типа объектов:

    MulTEx Тип листы и книги Коды листов и книги (Excel objects) - отображаются все листы проекта VBA книги, а так же глобальный модуль ЭтаКнига(ThisWorkbook).
    MulTEx Тип стандартные модули Стандартные модули (Modules) - здесь отображаются все стандартные модули проекта VBA книги.
    MuTEx Тип пользовательский формы Пользовательские формы (UserForms) - отображаются все пользовательские формы(UserForms) проекта VBA книги.
    MulTEx Тип модули классов Модули классов (Class Modules) - отображаются все модули классов проекта VBA книги.

Каждый тип в свою очередь в раскрывающемся списке содержит информацию о всех своих модулях. Модули, в которых нет ни одной процедуры или функции, а так же нет строк объявления переменных, констант, типов, функций API и т.п. считаются "пустыми" и отмечаются неактивной(серой) иконкой типа модуля.
Если отметить галочкой непосредственно тип (Стандартные модули (Modules), Модули классов (Class Modules), Пользовательские формы (UserForms), Коды листов и книги (Excel objects)), то будут удалены все модули данного типа из проекта активной книги. Если галочку не ставить, а выбрать только конкретные модули внутри типа - удалены будут только отмеченные модули. Однако, если установлен флажок Удалять только модули без процедур и значащих строк в области объявлений, то из всех отмеченных удалены будут только бесполезные модули без единой строки значащего кода.

Особым образом здесь стоит отметить модули Листов и ЭтаКнига. Главная особенность этих модулей в том, что модули листов не удаляются в любом случае. Все потому, что модули листов это по сути сами листы и коды записываются непосредственно в лист(правая кнопка мыши на ярлыке листа -Исходный текст) и удалить модуль можно только удалив лист из книги. А на листе могут быть полезные данные. Модуль ЭтаКнига и вовсе нельзя удалить, т.к. это сама книга Excel и удалить этот модуль можно только удалив саму книгу. Но эти модули можно полностью очистить от кодов, выбрав нужные модули галочкой.

Каждый модуль представляет собой список функций и процедур внутри него. Т.к. процедуры и функции могут быть разных типов, то каждому типу присваивается своя иконка:

    MulTEx - Sub Type - стандартные процедуры Sub
    MulTEx - Function Type - функции Function
    MulTEx - Property Let Type - процедуры Property Let
    MulTEx - Property Get Type - процедуры Property Get
    MulTEx - Property Set Type - процедуры Property Set

Если навести курсор мыши на конкретный модуль, то появится подсказка с информацией об общем количестве значащих строк в области объявлений(объявление переменных, констант, функций API и т.п.), количестве процедур и функций:
MulTex - подсказка по количеству процедур и функций в модуле

Удалять только модули без процедур и значащих строк в области объявлений

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

На примере первой картинки: если отметить галочкой полностью типы Стандартные модули (Modules), то будут удалены все модули(Module4, Module3). Несмотря на то, что Module4 содержит некие функции и процедуры. Если же при этом поставить галочку Удалять только модули без процедур и значащих строк в области объявлений, то удален будет только Module3, т.к. он не содержит никаких нужных строк кода.

Примечание: VBA проект книги, из которой планируется удаление макросов не должен быть защищен, иначе появится окно, сообщающее о наличии защиты. Макросы не будут удалены.

Также см.:
Как программно снять пароль с VBA проекта?
Копирование модулей и форм из одной книги в другую
Как удалить книгу из самой себя


Расскажи друзьям, если статья оказалась полезной:
  Плейлист   Видеоинструкции по использованию надстройки MulTEx
Обсуждение: 3 комментария
  1. Сергей:

    Скажите где и как вы вызываете окно удаления макросов.
    Я не могу его нигде найти....(ни в каких меню)
    У вас оно в виде картинки, а откуда она взялась ???????
    Когда создавал файл (минипрограмка) наделал кучу макросов (экспериментировал и искал то что надо), а удалить их теперь не могу. Все внутренности у них постирал, а сами они остались и каждый раз при запуске вылезает сообщение о них...

  2. Сергей, посмотрите на заголовок: эта команда часть моей надстройки MyAddin. Сразу под заголовком есть ссылка на описание всех её команд и функций.

  3. Сергей:

    Сегодня я это понял:)))
    Но дело в том, что я смотрел "Удаление макросов из активной книги" со страницы
    Архив
    Публикации с меткой ‘Файлы’ http://www.excel-vba.ru/tag/fajly/
    и вот там нет ссылки на "Надстройка MyAddin".
    Поэтому и написал этот пост...

Поделитесь своим мнением

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


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти
Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2020 Excel для всех   Войти