Удалить макросы из книги excel

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

Что такое макрос и зачем он нужен?

Это специальная программа, написанная на языке VBA для выполнения каких-либо функций в приложении MS Office. Можно воспользоваться уже готовым решением, которое легко найти на просторах сети Интернет, либо написать такую программу самостоятельно. С этим может справиться даже человек, абсолютно незнакомый с языком VBA. Достаточно нажать кнопку «Записать макрос», выполнить некоторые действия, которые затем можно повторить, просто запустив данный макрос, и вовремя нажать кнопку «Стоп».

Удаление листа Excel

Делается это следующим образом:

  • Создаем новый документ Excel (на примере Excel 2010).
  • Вставляем несколько листов и вносим в них произвольные данные.

  • Чтобы открыть редактор VBA, нажимаем Alt+F11.
  • Для вставки нового модуля (собственно, это и есть макрос) переходим на вкладку Insert (Вставить) и выбираем Module.
  • Вставляем код:
  • Закрываем окно редактирования макроса.
  • Закрываем редактор VBA.
  • Сохраняем книгу как документ с поддержкой макросов.
  • Открываем сохраненный документ.
  • Переходим «Вид-Макросы-Макросы» и выбираем DeleteSheet.
  • Нажимаем «Выполнить». Появится предупредительное сообщение о том, что в ячейках данного листа могут существовать данные. Чтобы удалить лист Excel макросом, нажимаем на кнопку «Удалить».
  • Для удаления листа без предупредительного сообщения в код макроса необходимо добавить две строчки:

Удаление строк в Excel

Теперь посмотрим, как удалить строки макросами Excel. Для начала уберем одну строку. Чтобы модуль легче было искать, так его и назовем – DeleteRow.

После выполнения макроса в Excel удалится строка под первым номером. Остальные сдвинутся вверх. Для удаления нескольких меняем вторую строку кода на следующую:

В данном случае будут удалены строки со второй по пятнадцатую.

Удаление

Макросы являются программами и могут причинить существенный вред компьютеру. Теперь рассмотрим, как удалить макрос в Excel.

Читайте также:  8 Опишите принцип печати матричных принтеров

Открываем вкладку «Вид», нажимаем на «Макросы», выбираем верхнюю строку под названием «Макросы», выбираем подлежащий удалению и нажимаем соответствующую кнопку.

Процесс удаления макроса в Excel 2003 имеет одну особенность. Чтобы полностью убрать его, нужно будет вручную очистить все модули. Для этого нужно зайти в редактор Visual Basic.

Удаление макросов программным способом

Следующий способ, как можно удалить макрос в Excel, заключается в использовании надстройки – специальной программы, которая устанавливается отдельно и содержит в себе несколько модулей для выполнения различных функций. Одной из таких надстроек является Kutools. С помощью данной программы можно одновременно удалить все макросы Excel.

Данная надстройка имеет более 300 различных функций. Отметим некоторые интересные функции:

  • преобразование обычных чисел в римские и обратно;
  • конвертация валюты с использованием актуальных курсов валют;
  • преобразование единиц измерения;
  • поиск ячеек с определенным форматированием;
  • удаление пустых листов, строк, столбцов.

При наличии большой базы макросов можно создать собственную надстройку. Благодаря этому можно будет разграничить «свои» и «чужие» (Excel будет им автоматически доверять).

Что делать, если он хранится в Личной книге? Как удалить макрос в Excel в этом случае? Сперва нужно отобразить скрытое окно. Для этого следует выбрать вкладку «Вид» и в группе «Окно» нажать кнопку «Отобразить». В дальнейшем процедура удаления макроса включает стандартные шаги.

Важно отметить, что при удалении через вкладку «Вид» открывается окно просмотра макросов. По умолчанию выбран пункт «Находится во всех открытых книгах». Как удалить макрос в Excel только для одного документа? Нужно выбрать соответствующий пункт в меню «Находится»: либо «Эта книга», либо пункт меню с названием данного документа.

Установил макрос, но не могу сейчас удалить. При удаление пишет: Когда хочешь его удалить, появляется надпись:

Изменить макросс в скрытой книге невозможно. Закройте все документы и выберите команду "Показать в меню файл". У меня Офис 2007. Как удалить Макрос?

Рано или поздно у разработчиков возникает вопрос: как удалить макросы, в том числе и из книги, в которой эти макросы расположены? Да еще так, чтобы об этом никто ничего не узнал?

Для изменения кодов программно необходимо, чтобы было проставлено доверие к объектной модели проекта VBA и изменяемый проект не должен быть защищен. Подробнее читайте в статье: Что необходимо для внесения изменений в проект VBA(макросы) программно
Без этого будет невозможно программное вмешательство в проект VBA.

УДАЛИТЬ ВСЕ МАКРОСЫ ИЗ АКТИВНОЙ КНИГИ

Читайте также:  Python работа со временем

Sub Delete_Macroses() Dim oVBComponent As Object, lCountLines As Long ‘Проверяем, защищен проект или нет If ActiveWorkbook.VBProject.Protection = 1 Then MsgBox "VBProject выбранной книги защищён." & vbCrLf & _ " Компоненты не будут удалены.", vbExclamation, "Отмена выполнения" Exit Sub End If For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents On Error Resume Next With oVBComponent Select Case .Type Case 1 ‘Модули .Collection.Remove oVBComponent Case 2 ‘Модули Класса .Collection.Remove oVBComponent Case 3 ‘Формы .Collection.Remove oVBComponent Case 100 ‘ЭтаКнига, Листы lCountLines = .CodeModule.CountOfLines .CodeModule.DeleteLines 1, lCountLines End Select End With Next Set oVBComponent = Nothing End Sub

Так же можно удалить макросы только из одного компонента(листа или книги или модуля).

УДАЛИТЬ ОТДЕЛЬНЫЙ МОДУЛЬ(Module), ФОРМУ(UserForm) КОД ЛИСТА ИЛИ КНИГИ
Удалить модуль/форму целиком достаточно просто:

ActiveWorkbook.VBProject.VBComponents("UserForm1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("UserForm1") ActiveWorkbook.VBProject.VBComponents("Module1").Collection.Remove ActiveWorkbook.VBProject.VBComponents("Module1")

С листами несколько сложнее — если удалить компонент полностью, то будут потеряны и все данные на листе, а не только макросы. Поэтому удалять необходимо только код внутри листа. В качестве примера возьмем Лист1:

Sub Delete_Macroses_In_One_Comp() Dim oVBComponent As Object, lCountLines As Long Set oVBComponent = ActiveWorkbook.VBProject.VBComponents("Лист1") With oVBComponent lCountLines = .CodeModule.CountOfLines .CodeModule.DeleteLines 1, lCountLines End With Set oVBComponent = Nothing End Sub

Здесь тоже есть небольшая поправка: Лист1 — это кодовое(внутреннее имя) листа. На ярлычке имя листа может отображаться как угодно, а вот внутренее. Его можно лучше подглядеть через редактор VBA:

Чтобы удалить коды из модуля книги необходимо вместо Лист1 указать ЭтаКнига(для англ.версии — ThisWorkbook).

УДАЛИТЬ ПРОЦЕДУРУ ИЗ ТЕЛА МОДУЛЯ
Если же Вам необходимо удалить лишь определенную процедуру из модуля формы, стандартного модуля, модуля листа или книги, то сделать это чуть сложнее. Рассмотрим на примере удаления процедуры с именем "Code2" , расположенной в стандартном модуле "Module2"

Читайте также:  Delphi label перенос строки

Sub Delete_Sub_From_Module() Dim lCountLines As Long, li As Long, lStartLine As Long, lProcLineCount As Long Dim sCodeName As String, sProcName As String With ActiveWorkbook.VBProject.VBComponents("Module2") ‘получаем кол-во строк кода в модуле lCountLines = .CodeModule.CountOfLines ‘получаем первую строку с кодом, исключая строки декларирования функции и опций модуля lStartLine = .CodeModule.CountOfDeclarationLines + 1 ‘цикл по всем строкам кода внутри модуля For li = lStartLine To lCountLines ‘получаем имя процедуры/функции, внутри которой строка кода sProcName = .CodeModule.ProcOfLine(li, 0) ‘если имя процедуры совпадает с тем, которое нам нужно If sProcName = "Code2" Then ‘узнаем кол-во строк процедуры/функции lProcLineCount = .CodeModule.ProcCountLines(sProcName, 0) ‘удаляем процедуру/функцию .CodeModule.DeleteLines li, lProcLineCount — 1 Exit For End If li = li + lProcLineCount Next li End With End Sub

Здесь стоит обратить внимание на один момент: данный поиск чуствителен к регистру. Т.е. если требуется удалить процедуру "Code2" , то и к сравнению надо вписывать имя именно так. Если записать "code2" , то совпадения найдено не будет и процедура не будет удалена. Во избежание подобного можно приводить имена к одному регистру:
If LCase(sProcName) = LCase("Code2") Then

УДАЛИТЬ ВСЕ МАКРОСЫ ВРУЧНУЮ
Еще хочу добавить, что если Вам надо не скрыто, а просто быстро удалить все макросы из книги и Вы счастливый обладатель Excel версии 2007 и выше, то Вам всего лишь необходимо книгу, из которой хотите удалить макросы, Сохранить как-обычная Книга Excel(МенюСохранить какКнига Excel).

Программно это можно сделать простым кодом:

Sub SaveBookWithoutMacro() ActiveWorkbook.SaveAs Filename:="C:Книга1.xlsx", FileFormat:=51 End Sub

Для тех же, кто все еще использует офис 2003 и ранее и хочет удалить коды и макросы вручную — придется удалять каждый модуль из проекта и каждый код из модулей листов и книг поочередно, руками.

Статья помогла? Поделись ссылкой с друзьями!