|
|||||||
Как удалить макросы в книге?
Время создания: 16.03.2019 23:43
Раздел: Разные закладки - VBA - VBA управление кодами
Запись: xintrea/mytetra_db_adgaver_new/master/base/1486375304vq96a7epxa/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
'УДАЛИТЬ ВСЕ МАКРОСЫ ИЗ АКТИВНОЙ КНИГИ 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") lCountLines = .CodeModule.CountOfLines .CodeModule.DeleteLines 1, lCountLines УДАЛИТЬ ПРОЦЕДУРУ ИЗ ТЕЛА МОДУЛЯ Здесь стоит обратить внимание на один момент: данный поиск чуствителен к регистру. Т.е. если требуется удалить процедуру "Code2", то и к сравнению надо вписывать имя именно так. Если записать "code2", то совпадения найдено не будет и процедура не будет удалена. Во избежание подобного можно приводить имена к одному регистру: 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) 'если имя процедуры совпадает с тем, которое нам нужно 'узнаем кол-во строк процедуры/функции lProcLineCount = .CodeModule.ProcCountLines(sProcName, 0) |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|