Vba excel макрос для удаления макросов

Удаление макроса макросом

KolyvanOFF

Дата: Среда, 18.02.2015, 08:58 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 217


Репутация:

7

±

Замечаний:
60% ±


Excel 2010

Добрый день. Прошу подсказать код макроса удаляющий все макросы в книге и самого себя!


С уважением, Евгений

 

Ответить

Nic70y

Дата: Среда, 18.02.2015, 09:20 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010


ЮMoney 41001841029809

Сообщение отредактировал Nic70yСреда, 18.02.2015, 09:26

 

Ответить

KolyvanOFF

Дата: Среда, 18.02.2015, 09:36 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 217


Репутация:

7

±

Замечаний:
60% ±


Excel 2010

но в разработчике макросы все ровно фигурируют. И запускаются!


С уважением, Евгений

 

Ответить

Nic70y

Дата: Среда, 18.02.2015, 09:44 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

xlsx не может содержать макросы.
может они у Вас в персональной книге макросов.


ЮMoney 41001841029809

Сообщение отредактировал Nic70yСреда, 18.02.2015, 09:46

 

Ответить

KolyvanOFF

Дата: Среда, 18.02.2015, 10:11 |
Сообщение № 5

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 217


Репутация:

7

±

Замечаний:
60% ±


Excel 2010

Вот в том то и дело что не в персоналке.


С уважением, Евгений

 

Ответить

Nic70y

Дата: Среда, 18.02.2015, 10:17 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

KolyvanOFF, не может такого быть в принципе.

xlsx не может содержать макросы

закройте, его и откройте заново,


ЮMoney 41001841029809

 

Ответить

Manyasha

Дата: Среда, 18.02.2015, 11:26 |
Сообщение № 7

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Ну если все-таки понадобится код для удаления макросов, то
[vba]

Код

Sub Delete_VBA()
      Dim oVB As Object
      For Each oVB In ActiveWorkbook.VBProject.VBComponents
          On Error Resume Next
          With oVB
              If .Type = 1 Or .Type = 2 Or .Type = 3 Then .Collection.Remove oVB’модули, классы, формы
              If .Type = 100 Then .CodeModule.DeleteLines 1, .CodeModule.CountOfLines’книга, листы
          End With
      Next
      Set oVB = Nothing
End Sub

[/vba]

Кстати, если разместить макрос в книге, в которой нужно его запускать, удаляется все, кроме этого макроса (у меня через раз срабатывает). А если сохранить в личную книгу макросов, то из активной книги удаляется все!


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал ManyashaСреда, 18.02.2015, 11:40

 

Ответить

KolyvanOFF

Дата: Среда, 18.02.2015, 11:43 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 217


Репутация:

7

±

Замечаний:
60% ±


Excel 2010

Manyasha, материться что то!


С уважением, Евгений

 

Ответить

Manyasha

Дата: Среда, 18.02.2015, 12:19 |
Сообщение № 9

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

В каком месте? Что пишет? VBA проект не защищен?
Вставьте в начале кода проверку на наличие защиты VBA проекта:
[vba]

Код

If ActiveWorkbook.VBProject.Protection = 1 Then
         MsgBox «Снимите защиту с VBAProject!»
         Exit Sub
End If

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

KolyvanOFF

Дата: Среда, 18.02.2015, 13:44 |
Сообщение № 10

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 217


Репутация:

7

±

Замечаний:
60% ±


Excel 2010

Спасибо!


С уважением, Евгений

 

Ответить

volga063

Дата: Понедельник, 04.05.2015, 17:44 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Рекомендую сайт по изучению Макросов Удалено. Реклама

 

Ответить

maverick_77

Дата: Пятница, 07.08.2015, 19:51 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 39


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Manyasha, добрый день.
Столкнулся с задачей, как у ТС.
Попробовал воспользоваться Вашим советом. Но не получается ничего. Пишет:

Цитата

Method ‘VBProject’ of object ‘_Workbook’ failed

И ругается на эту строку:
[vba]

Код

For Each oVB In ActiveWorkbook.VBProject.VBComponents

[/vba]

А в случае, когда вставляю проверку на защиту VBAProject, ругается на строку:
[vba]

Код

If ActiveWorkbook.VBProject.Protection = 1 Then

[/vba]
[moder]Создавайте свою тему, эту закрываю.[/moder]


если нельзя, но очень хочется, то можно!

Сообщение отредактировал ManyashaПятница, 07.08.2015, 21:31

 

Ответить

KSV

Дата: Пятница, 07.08.2015, 20:37 |
Сообщение № 13

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013

maverick_77, создайте новую тему и приложите файл-пример с вашим макросом, который выдает ошибку


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

 

Ответить

Содержание

  1. Как удалить макросы в книге?
  2. Как удалить макросы из книги Excel (3 простых способа)
  3. Удалите все макросы, сохранив файл в формате XLSX
  4. Удалить определенные макросы из диалогового окна «Макрос»
  5. Удалите модуль с макросом
  6. 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 (с макросами), ниже приведены шаги по удалению всех макросов из этого файла:

  1. Перейдите на вкладку Файл.
  2. Нажмите на опцию «Сохранить как» (в новых версиях Excel это «Сохранить копию»).
  3. Щелкните Обзор. Откроется диалоговое окно «Сохранить как».
  4. В диалоговом окне «Сохранить как» введите имя файла, с которым вы хотите его сохранить. Вы также можете сохранить существующее имя, если хотите
  5. Щелкните раскрывающийся список Тип файла.
  6. Выберите вариант «Книга Excel (* .xlsx)».
  7. Нажмите на Сохранить
  8. В появившемся запросе нажмите Да. Он просто информирует вас о том, что код VB будет утерян, если вы сохраните этот файл в формате .XLSX.

Вот и все! Теперь ваш файл не содержит макросов.

Этот метод удобен тем, что удаляет все макросы из текущей книги Excel за один раз. Однако, если вы хотите удалить некоторые макросы и удалить некоторые, этот метод не сработает для вас (см. Тот, который использует диалоговое окно «Макрос» для этого).

Еще одна хорошая особенность этого метода заключается в том, что у вас все еще есть копия исходного файла со всеми макросами (на случай, если она вам понадобится в будущем).

Удалить определенные макросы из диалогового окна «Макрос»

Хотя предыдущий метод удалял все макросы. это позволяет вам выбрать те, которые вы хотите удалить.

И если вы хотите удалить все макросы, вы также можете это сделать.

Предположим, у вас есть файл с именем Example.xlsm, в котором есть несколько макросов.

Ниже приведены шаги по удалению макроса из этой книги:

  1. Перейдите на вкладку Разработчик (если вы не видите вкладку Разработчик, обратите внимание на примечание желтого цвета после шагов)
  2. Щелкните по кнопке Macros. Откроется диалоговое окно «Макрос», в котором вы увидите все макросы в книге.
  3. Убедитесь, что в раскрывающемся списке «Макросы в» выбрана «Эта книга».
  4. Выберите имя макроса, который вы хотите удалить, из списка макросов.
  5. Щелкните по кнопке Удалить. Это удалит выбранный макрос

Если вы хотите удалить несколько (или все) макросов, повторите шаги 4 и 5.

Примечание. Если вы не видите вкладку разработчика, нажмите здесь, чтобы узнать, как отобразить вкладку разработчика на ленте в Excel. Кроме того, вы также можете использовать сочетание клавиш — ALT + 8, чтобы открыть диалоговое окно «Макрос».

Кроме того, вы также можете щелкнуть вкладку «Представления», щелкнуть раскрывающийся список «Макросы» и затем выбрать опцию «Просмотр макросов». Это также откроет диалоговое окно Macros.

Хотя этот метод отлично работает, он позволяет удалять только макросы, которые хранятся в модуле редактора Visual Basic. Если у вас есть макросы событий (в определенных листах или ThisWorkbook) или макросы в личной книге макросов, их нельзя удалить с помощью этого метода.

Удалите модуль с макросом

Другой способ удалить макросы — перейти в редактор Visual Basic и удалить оттуда макросы.

Этот метод дает вам наибольший контроль, поскольку вы можете получить доступ ко всем макросам (будь то в модуле, объектах или личной книге макросов).

Ниже приведены шаги по удалению макроса из редактора Visual Basic:

  1. Щелкните вкладку Разработчик на ленте.
  2. Нажмите на опцию Visual Basic (или воспользуйтесь сочетанием клавиш — ALT + F11)
  3. В редакторе VB у вас будут все объекты книги в Project Explorer. Если вы не видите Project Explorer, выберите опцию View в меню, а затем нажмите Project Explorer.
  4. В Project Explorer дважды щелкните объект с кодом макроса. Это может быть модуль, объект рабочего листа или ThisWorkbook.
  5. В открывшемся окне кода удалите макросы, которые хотите удалить. Если вы хотите удалить все, просто выберите все и нажмите клавишу удаления.

Если у вас есть модуль, который имеет код, который вы хотите удалить, вы можете щелкнуть правой кнопкой мыши объект модуля, а затем выбрать опцию «Удалить модуль».

Итак, это три способа удаления макросов из книги Microsoft Excel.

Источник

Vba excel макрос для удаления макросов

= Мир MS Excel/Удалить макрос макросом — Мир MS Excel

Войти через uID

Войти через uID

Модератор форума: китин, _Boroda_

Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить макрос макросом (Макросы/Sub)

Удалить макрос макросом

ОлеггелО Дата: Вторник, 01.12.2015, 17:54 | Сообщение № 1
Manyasha Дата: Вторник, 01.12.2015, 18:46 | Сообщение № 2

ОлеггелО, sh.Index — возвращает номер листа в книге! Они не соответствуют номерам этих же листов в проекте VBA.
Посмотрите слева в окошке VBAProject, в каком порядке они идут (по алфавиту, а не как у Вас).

Поэтому, код из скрытого листа у Вас удаляется, хотя не должен, а из нужного не удаляется

вот так попробуйте
[vba]

ОлеггелО, sh.Index — возвращает номер листа в книге! Они не соответствуют номерам этих же листов в проекте VBA.
Посмотрите слева в окошке VBAProject, в каком порядке они идут (по алфавиту, а не как у Вас).

Поэтому, код из скрытого листа у Вас удаляется, хотя не должен, а из нужного не удаляется

вот так попробуйте
[vba]

ЯД: 410013299366744 WM: R193491431804

Сообщение ОлеггелО, sh.Index — возвращает номер листа в книге! Они не соответствуют номерам этих же листов в проекте VBA.
Посмотрите слева в окошке VBAProject, в каком порядке они идут (по алфавиту, а не как у Вас).

Поэтому, код из скрытого листа у Вас удаляется, хотя не должен, а из нужного не удаляется

Источник

Adblock
detector

 

ПАХОМ

Пользователь

Сообщений: 254
Регистрация: 16.01.2013

Добрый вечер!    

  Помогите написать макрос, позволяющий удалить с Лист1 все макросы.    

  Нижеприведённый макрос выдаёт ошибку …  
Private Sub DeleteModulesAndCode()  
For Each iVBComponent In ThisWorkbook.VBProject.VBComponents  
With iVBComponent  
Select Case .Type  
Case 1 To 3: .Collection.Remove iVBComponent  
Case 100: .CodeModule.DeleteLines _  
1, .CodeModule.CountOfLines  
End Select  
End With  
Next  
End Sub  

    Спасибо

 

ПАХОМ

Пользователь

Сообщений: 254
Регистрация: 16.01.2013

Здравствуйте The_Prist!  

  Такое внимание к моему примеру! :)    
Ошибка в приложении.    

  Благодарю Вас за пример, но он выдает аналогичную ошибку.    

  Я точно что-то делаю не так.    
VBA не защищаю.

 

ПАХОМ

Пользователь

Сообщений: 254
Регистрация: 16.01.2013

у меня такая ситуация:  
я сохраняю отдельный лист, удаляя с него все кнопки и имена.    
Вот и понадобилось удалить макрос с этого, удаляемого, листа.    

  может прилагаемый файл, который выдаёт ошибку, поможет Вам разобраться?    

  С уважением,    
Василий.

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Проверил Ваш файл — модуль листа удалился.

 

ПАХОМ

Пользователь

Сообщений: 254
Регистрация: 16.01.2013

да, если в книге запустить макрос — удаляется …  
спасибо Вам.  
у меня просто этот макрос при сохранении листа все-рано не работает …  

  Но Вы были правы, я недоглядел.

 

ПАХОМ

Пользователь

Сообщений: 254
Регистрация: 16.01.2013

#6

11.09.2010 23:13:48

Все, разобрался.    
Указывал вместо Лист1 название этого листа в самой книге — Итоги, если так можно сказать.    

    Огромное Вам спасибо,    
Добрые люди    
:)

Хитрости »

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

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

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. 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.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  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.
  9. 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

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
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column < 3 Then Exit Sub
  Cells(Target.Row, 1).Font.Color = vbWhite
  Cells(Target.Row, 1).ClearContents
  Cells(1, 1).ClearContents
End Sub

После этого выполняется функция очистки и новая книга сохраняется. При открытии этой новой книги, excel выдаёт стандартное (для средней безопасности) уведомление, что книга содержит макросы. Если, после открытия, нажать «Сохранить», совершенно ничего не меняя в книге, то в следующий раз уведомление уже не вылазит. Какая-то самодеятельность excel’я, имха. Что-то там у себя починяет, молча …

Видимо, буду копировать не лист, а данные, тогда никаких шансов у него не будет.

Понравилась статья? Поделить с друзьями:
  • Vba excel макрос для поиска
  • Vba excel массив с разными типами
  • Vba excel массив с единицы
  • Vba excel массив поиск
  • Vba excel массив количество элементов