Удаление макроса макросом |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Содержание
- Как удалить макросы в книге?
- Как удалить макросы из книги Excel (3 простых способа)
- Удалите все макросы, сохранив файл в формате XLSX
- Удалить определенные макросы из диалогового окна «Макрос»
- Удалите модуль с макросом
- Vba excel макрос для удаления макросов
Как удалить макросы в книге?
Рано или поздно у разработчиков возникает вопрос: как удалить макросы, в том числе и из книги, в которой эти макросы расположены? Да еще так, чтобы об этом никто ничего не узнал?
Для изменения кодов программно необходимо, чтобы было проставлено доверие к объектной модели проекта VBA и изменяемый проект не должен быть защищен. Подробнее читайте в статье: Что необходимо для внесения изменений в проект VBA(макросы) программно
Без этого будет невозможно программное вмешательство в проект VBA.
УДАЛИТЬ ВСЕ МАКРОСЫ ИЗ АКТИВНОЙ КНИГИ
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»
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 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 и ранее и хочет удалить коды и макросы вручную — придется удалять каждый модуль из проекта и каждый код из модулей листов и книг поочередно, руками.
Статья помогла? Поделись ссылкой с друзьями!
Источник
Как удалить макросы из книги Excel (3 простых способа)
Использование макросов VBA в Excel может значительно сэкономить время. Вы можете автоматизировать множество повторяющихся задач и создавать новые функции и возможности в Excel с помощью простых кодов макросов VBA.
Но в некоторых случаях вам может потребоваться удалить все макросы из книги Excel (или удалить только определенные макросы).
Это может быть в том случае, если вы получаете книгу от кого-то другого и хотите освободить ее от макросов, или когда вы отправляете кому-то файл с макросами, а квитанция не нуждается в них в книге.
В этом уроке я покажу вам несколько действительно простых способов удалить макросы из книги в Microsoft Excel.
Удалите все макросы, сохранив файл в формате XLSX
Если вы хотите избавиться от всех макросов сразу, самый простой способ сделать это — сохранить существующую книгу в формате XLSX.
По умолчанию у вас не может быть кода макроса VBA в формате файла XLSX. Если вы это сделаете, он будет автоматически удален при сохранении файла Excel.
В Excel вы можете использовать макросы только в форматах .XLSM, .XLSB и более старых форматах .XLS. Когда вы сохраняете книгу в любом другом формате, макросы сразу теряются.
Предположим, у вас есть файл с именем Example.xlsm (с макросами), ниже приведены шаги по удалению всех макросов из этого файла:
- Перейдите на вкладку Файл.
- Нажмите на опцию «Сохранить как» (в новых версиях Excel это «Сохранить копию»).
- Щелкните Обзор. Откроется диалоговое окно «Сохранить как».
- В диалоговом окне «Сохранить как» введите имя файла, с которым вы хотите его сохранить. Вы также можете сохранить существующее имя, если хотите
- Щелкните раскрывающийся список Тип файла.
- Выберите вариант «Книга Excel (* .xlsx)».
- Нажмите на Сохранить
- В появившемся запросе нажмите Да. Он просто информирует вас о том, что код VB будет утерян, если вы сохраните этот файл в формате .XLSX.
Вот и все! Теперь ваш файл не содержит макросов.
Этот метод удобен тем, что удаляет все макросы из текущей книги Excel за один раз. Однако, если вы хотите удалить некоторые макросы и удалить некоторые, этот метод не сработает для вас (см. Тот, который использует диалоговое окно «Макрос» для этого).
Еще одна хорошая особенность этого метода заключается в том, что у вас все еще есть копия исходного файла со всеми макросами (на случай, если она вам понадобится в будущем).
Удалить определенные макросы из диалогового окна «Макрос»
Хотя предыдущий метод удалял все макросы. это позволяет вам выбрать те, которые вы хотите удалить.
И если вы хотите удалить все макросы, вы также можете это сделать.
Предположим, у вас есть файл с именем Example.xlsm, в котором есть несколько макросов.
Ниже приведены шаги по удалению макроса из этой книги:
- Перейдите на вкладку Разработчик (если вы не видите вкладку Разработчик, обратите внимание на примечание желтого цвета после шагов)
- Щелкните по кнопке Macros. Откроется диалоговое окно «Макрос», в котором вы увидите все макросы в книге.
- Убедитесь, что в раскрывающемся списке «Макросы в» выбрана «Эта книга».
- Выберите имя макроса, который вы хотите удалить, из списка макросов.
- Щелкните по кнопке Удалить. Это удалит выбранный макрос
Если вы хотите удалить несколько (или все) макросов, повторите шаги 4 и 5.
Примечание. Если вы не видите вкладку разработчика, нажмите здесь, чтобы узнать, как отобразить вкладку разработчика на ленте в Excel. Кроме того, вы также можете использовать сочетание клавиш — ALT + 8, чтобы открыть диалоговое окно «Макрос».
Кроме того, вы также можете щелкнуть вкладку «Представления», щелкнуть раскрывающийся список «Макросы» и затем выбрать опцию «Просмотр макросов». Это также откроет диалоговое окно Macros.
Хотя этот метод отлично работает, он позволяет удалять только макросы, которые хранятся в модуле редактора Visual Basic. Если у вас есть макросы событий (в определенных листах или ThisWorkbook) или макросы в личной книге макросов, их нельзя удалить с помощью этого метода.
Удалите модуль с макросом
Другой способ удалить макросы — перейти в редактор Visual Basic и удалить оттуда макросы.
Этот метод дает вам наибольший контроль, поскольку вы можете получить доступ ко всем макросам (будь то в модуле, объектах или личной книге макросов).
Ниже приведены шаги по удалению макроса из редактора Visual Basic:
- Щелкните вкладку Разработчик на ленте.
- Нажмите на опцию Visual Basic (или воспользуйтесь сочетанием клавиш — ALT + F11)
- В редакторе VB у вас будут все объекты книги в Project Explorer. Если вы не видите Project Explorer, выберите опцию View в меню, а затем нажмите Project Explorer.
- В Project Explorer дважды щелкните объект с кодом макроса. Это может быть модуль, объект рабочего листа или ThisWorkbook.
- В открывшемся окне кода удалите макросы, которые хотите удалить. Если вы хотите удалить все, просто выберите все и нажмите клавишу удаления.
Если у вас есть модуль, который имеет код, который вы хотите удалить, вы можете щелкнуть правой кнопкой мыши объект модуля, а затем выбрать опцию «Удалить модуль».
Итак, это три способа удаления макросов из книги Microsoft Excel.
Источник
Vba excel макрос для удаления макросов
= Мир MS Excel/Удалить макрос макросом — Мир MS Excel
Войти через uID
Войти через uID
Модератор форума: китин, _Boroda_
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить макрос макросом (Макросы/Sub)
Удалить макрос макросом
ОлеггелО | Дата: Вторник, 01.12.2015, 17:54 | Сообщение № 1 | ||||||
|
ПАХОМ Пользователь Сообщений: 254 |
Добрый вечер! Помогите написать макрос, позволяющий удалить с Лист1 все макросы. Нижеприведённый макрос выдаёт ошибку … Спасибо |
ПАХОМ Пользователь Сообщений: 254 |
Здравствуйте The_Prist! Такое внимание к моему примеру! Благодарю Вас за пример, но он выдает аналогичную ошибку. Я точно что-то делаю не так. |
ПАХОМ Пользователь Сообщений: 254 |
у меня такая ситуация: может прилагаемый файл, который выдаёт ошибку, поможет Вам разобраться? С уважением, |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Проверил Ваш файл — модуль листа удалился. |
ПАХОМ Пользователь Сообщений: 254 |
да, если в книге запустить макрос — удаляется … Но Вы были правы, я недоглядел. |
ПАХОМ Пользователь Сообщений: 254 |
#6 11.09.2010 23:13:48 Все, разобрался. Огромное Вам спасибо, |
Хитрости »
6 Июнь 2011 79264 просмотров
Как удалить макросы в книге?
Рано или поздно у разработчиков возникает вопрос: как удалить макросы, в том числе и из книги, в которой эти макросы расположены? Да еще так, чтобы об этом никто ничего не узнал?
Для изменения кодов программно необходимо, чтобы было проставлено доверие к объектной модели проекта VBA и изменяемый проект не должен быть защищен. Подробнее читайте в статье: Что необходимо для внесения изменений в проект VBA(макросы) программно
Без этого будет невозможно программное вмешательство в проект VBA.
- Удалить все макросы из активной книги
- Удалить отдельный модуль(Module), Форму(UserForm), Код листа или книги
- Удалить отдельную процедуру из модуля
- Удалить все макросы вручную
УДАЛИТЬ ВСЕ МАКРОСЫ ИЗ АКТИВНОЙ КНИГИ
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"
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 Next li End With End Sub
Здесь стоит обратить внимание на один момент: данный поиск чувствителен к регистру. Т.е. если требуется удалить процедуру "Code2"
, то и к сравнению надо вписывать имя именно так. Если записать "code2"
, то совпадения найдено не будет и процедура не будет удалена. Во избежание подобного можно приводить имена к одному регистру:
If LCase(sProcName) = LCase(«Code2») Then
Еще хочу добавить, что если надо не скрыто, а просто быстро удалить все макросы из книги и Вы счастливый обладатель Excel версии 2007 и выше, то всего лишь необходимо книгу, из которой хотите удалить макросы, Сохранить как -обычная Книга Excel (
Файл(File)(или кнопка Меню для 2007 Excel)
—
Сохранить как(Save As)
—
Книга Excel(Excel Workbook)
).
Программно это можно сделать простым кодом:
Sub SaveBookWithoutMacro() ActiveWorkbook.SaveAs Filename:="C:Книга1.xlsx", FileFormat:=51 End Sub
Отдельную роль здесь играет параметр FileFormat, которому мы назначаем значение 51. По сути 51 — это значение константы xlOpenXMLWorkbook, которая говорит VBA, что файл надо сохранить в формате обычной книги Excel без поддержки макросов. Работает только начиная с 2007 Excel.
Для тех же, кто все еще использует офис 2003 и ранее и хочет удалить коды и макросы вручную — придется удалять каждый модуль из проекта и каждый код из модулей листов и книг поочередно, руками.
Также см.:
Копирование модулей и форм из одной книги в другую
Как программно снять пароль с VBA проекта?
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
‘УДАЛИТЬ ВСЕ МАКРОСЫ ИЗ АКТИВНОЙ КНИГИ
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
УДАЛИТЬ ПРОЦЕДУРУ ИЗ ТЕЛА МОДУЛЯ
Если же Вам необходимо удалить лишь определенную процедуру из модуля формы, стандартного модуля, модуля листа или книги, то сделать это чуть сложнее. Рассмотрим на примере удаления процедуры с именем «Code2», расположенной в стандартном модуле «Module2»
Здесь стоит обратить внимание на один момент: данный поиск чуствителен к регистру. Т.е. если требуется удалить процедуру «Code2», то и к сравнению надо вписывать имя именно так. Если записать «code2», то совпадения найдено не будет и процедура не будет удалена. Во избежание подобного можно приводить имена к одному регистру:
If LCase(sProcName) = LCase(«Code2») Then
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
Delete a VBA macro module from Excel with this macro. This macro allows you to fully remove a macro module from Excel. This is great when you need to quickly clean up your macros, vba, or just leftover modules in Excel. You do need to be careful not to delete a module that contains important code.
This is a great macro and is very powerful.
To use this macro, you need to do two things. First, replace Module1 with the name of the actual module which you want to delete. If you wanted, you could include this in a loop in order to delete all modules from the workbook in Excel. Second, you need to enable access to the vba project object model — > In previous versions of Excel go to Tools > Macro > Security — Trusted Publishers check the box next to «Trust access to Visual Basic Editor». In Excel 2007 go to Office Button > Excel Options > Trust Center > Trust Center Settings > Macro Setting and check the box next to «Trust access to the VBA project object model».
Where to install the macro: Module
Excel Macro to Delete a VBA Module From Excel
Sub Delete_Module()
Dim vbCom As Object
Set vbCom = Application.VBE.ActiveVBProject.VBComponents
vbCom.Remove VBComponent:= _
vbCom.Item("Module1")
End Sub
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Similar Content on TeachExcel
Open a Word Document from Excel
Macro: This Microsoft Excel macro will open a Microsoft Word document from excel. With this m…
Open a PowerPoint Presentation from Excel
Macro: This free macro for Microsoft Excel allows you to open any PowerPoint presentation fro…
Open PDF from Excel
Tutorial:
How to open a PDF file from a clickable button, link, or image in Excel. This allows yo…
Remove Comments from a Workbook in Excel — All Comments Deleted — Macro VBA
Macro: Excel macro that will remove/delete all of the comments from an entire Excel workbook….
Delete All Chart Sheets in Excel — Only Chart Sheets are Deleted — Not Embedded Charts
Macro: Delete all chart sheets and tabs in Excel using this macro. This will only delete the char…
Delete Comments in Excel — Permanently Remove Specific Comments from Excel
Macro: Delete a comment in Excel with this macro. You can permanently remove or delete a specific…
How to Install the Macro
- Select and copy the text from within the grey box above.
- Open the Microsoft Excel file in which you would like the Macro to function.
- Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
Or For other ways to get there, Click Here. - On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
- If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
- Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
- You are now ready to run the macro.
Similar Content
Open a Word Document from Excel
Macro: This Microsoft Excel macro will open a Microsoft Word document from excel. With this m…
Open a PowerPoint Presentation from Excel
Macro: This free macro for Microsoft Excel allows you to open any PowerPoint presentation fro…
Open PDF from Excel
Tutorial:
How to open a PDF file from a clickable button, link, or image in Excel. This allows yo…
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Video
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Формулировка задачи:
Многих мучает вопрос как с помощью команды макроса в Excel удалить сам макрос или один из его модулей.
Варианты такие:
*******************
Sub DeleteAllLines() ‘ удаляет все что написано в Модуле1
With ThisWorkbook.VBProject.VBComponents(«Module1»).CodeModule
.DeleteLines 1, .CountOfLines
End With
End sub
*******************
Sub DeleteModule() ‘ удаляет сам Модуль1
Dim vbc As VBComponent
Set vbc = ThisWorkbook.VBProject.VBComponents(«Module1»)
ThisWorkbook.VBProject.VBComponents.Remove vbc
Set vbc = Nothing
End sub
*******************
Sub DeleteModule() ‘ удаляет весь макрос
Dim tmp As String
Dim vbc As VBComponent
Dim prj As VBIDE.VBE
Set prj = Excel.Application.VBE
For Each vbc In prj.VBProjects(«NAME»).VBComponents
If (vbc.Type = vbext_ct_MSForm Or vbc.Type = vbext_ct_StdModule Or vbc.Type = vbext_ct_ClassModule) And vbc.Name <> «Module2» Then
tmp = vbc.Name
prj.VBProjects(«NAME»).VBComponents.Remove vbc
tmp = «»
End If
Next vbc
Set prj = Nothing
End sub
*******************
НО!!!!!!!!!!!!!!!!!!!
Все эти коды выполняются ТОЛЬКО с установленной галочкой «Доверять доступ к Visual Basic Project» («Trust access to Visual Basic Project») в параметрах безопасности макросов.
ВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
Я НЕ ПИШУ ВИРУСЫ, дело в том, что я продаю свои мелкие программки на VBA и хочу защитить свои авторские права. Мне надо чтобы после определенной даты или после определенного кол-ва запуска программы она удаляла сама себя. Мне НЕ НАДО воздействовать на другие файлы и программы, надо только «лицензировать» свою.
Была еще такая идея:
После проверки даты или кол-ва запусков, в случае привышения макрос сохраняет свой же файл в формате Excel 3.0, который не может содержать макросов. Идея прекрасно воплощяется в жизнь, но только если сам макрос не защищен паролем! Может как-то развить это направление?
Слышал еще такое:
Что если проект имеет цифровую подпись MicroSoft то даже эта галочка не нужна, т.к. в таком случае Excel воспринемает эту прогу как «свою родную» и разрешает любые манипуляции с макросом самим макросом. Для этого надо всего-лишь подписаться цифровым сертификатом MS. Кто-нибудь знает как это сделать? Тем более что прога по присвоению сертификатов находится в стандартной комплектации Офиса.
Заранее спасибо за все советы!
Код к задаче: «Удаление макросом VBA себя самого или своего модуля»
textual
Cells(<font color="darkblue"><b>1</b></font>,<font color="darkblue"><b>1</b></font>)=<font color="darkblue"><b>123</b></font>
Полезно ли:
7 голосов , оценка 4.571 из 5
Да, мы не хочим с 2003-го уходить!
Спасибо всем за ответы. Придётся, наверное, как-то по другому решать вопрос. У меня в новую книгу копируется лист, целиком. В этом листе коду всего несколько строк:
Visual Basic | ||
|
После этого выполняется функция очистки и новая книга сохраняется. При открытии этой новой книги, excel выдаёт стандартное (для средней безопасности) уведомление, что книга содержит макросы. Если, после открытия, нажать «Сохранить», совершенно ничего не меняя в книге, то в следующий раз уведомление уже не вылазит. Какая-то самодеятельность excel’я, имха. Что-то там у себя починяет, молча …
Видимо, буду копировать не лист, а данные, тогда никаких шансов у него не будет.