Страницы: 1
RSS
Очистка книги от макросов опять же макросом.
 
Добрый день!  
Получился невольный каламбур, но именно это и нужно. Помском не нашел такого. Знаю, что есть в настройке Plex, но мне нужно именно из другого макроса открывать книги и сразу чистить их от макросов, ибо тот, что в них не дает работать моему.
 
Как это не даёт?  
Может быть достаточно будет в начале кода (перед открытием других книг) выполнить  
Application.EnableEvents = False  
ну и в конце не забыть  
Application.EnableEvents = True
 
Подключаем Microsoft Visual Basic for Application Extensibility 5.3  
Вклчаем Доверять доступ к объектной модели проектов VBA  
Public Sub test()  
   Dim pProject As VBIDE.VBProject  
   Dim pComponent As VBIDE.VBComponent  
   Set pProject = ThisWorkbook.VBProject  
   For Each pComponent In pProject.VBComponents  
       If pComponent.Name = "Class1" Then  
           pProject.VBComponents.Remove pComponent  
       End If  
   Next pComponent  
End Sub  
Главное модули книги и листов удалить нельзя, но код почистить можно.
 
Добрый день, Hugo!  
А если у меня в тех книгах макросом защищены ячейки от изменения, этот вариант даст мне с ними работать?  
И все же хочется именно удалять макросы, а то потом с тех книг листы копируются в общую, и ее размер становится непомерный..
 
To anvg:  
Я так понял это очистит только классы, коих у меня там и так нету..
 
ctr  
У вас Object Browser удалён за ненадобностью?  
У объекта VBComponent есть свойство Type которое позволяет определить модуль это, форма, класс и прочая.  
Есть подчинённый объект CodeModule который позволяет удалять текст там где нельзя удалить модуль.    
Чуток пошевелитесь однако, я привёл лишь пример для начала действий.
 
А может кто подскажет, как открыть книгу с отключенными макросами?  
И удалять без нать.
 
Application.EnableEvents = False  
это и есть "с отключенными макросами".  
Главное туда руками не лезть :)
 
Application.EnableEvents = False  
ВСЕ события отключит, в т.ч. и в рабочей книге. Нет?
 
Мысль пришла, перефомрмулирую задачу: сначала делаю Application.EnableEvents = False, а потом надо скопировать лист в общую книгу, но без макросов. Так можно?
 
Можно.  
 http://msoffice.nm.ru/faq/macros/module.htm#faq50
 
Вот это дело!  
Премного благодарен, Hugo!
 
Андрей - отключит конечно ВСЕ. Но ведь на время открытия стронних книг обработка событий в нашей книге нам не нужна. А если вдруг нужна (заносим данные из внешней книги и это нужно обработать) - так можно и включить на это время, а перед открытием очередной книги снова выключить.
 
Это все понятно.  
Интересен именнно вопрос, как макросом открыть книгу, и сказать, что макросы в этой книге включать не надо.
 
Так вероятно не получится - да и не нужно это никому :)  
А вот наоборот как раз нужно бывает - и кстати оно только так и работает, макросы включаются всегда и без вопросов :)
 
Вот же-ж блин! У меня же проект в тех книгах паролем защищен, и процедура на удаление не работает! Можно ли как-то при открытии книги открывать проект, передавая пароль
 
Для EXCEL >=2007  
Хоть два пароля  
Sub Del_All_Macro()  
   Application.DisplayAlerts = False  
   Application.ScreenUpdating = False  
   startName = "test.xls"  
   pth = ThisWorkbook.Path & "\"  
   Set wb = Workbooks.Open(pth & startName)  
   wb.SaveAs pth & startName & "x", 51  
   wb.Close  
   Kill pth & startName  
   startName = startName & "x"  
   Set wb = Workbooks.Open(pth & startName)  
   wb.SaveAs Left$(pth & startName, Len(pth & startName) - 1), -4143  
   wb.Close  
   Kill pth & startName  
   Application.DisplayAlerts = True  
   Application.ScreenUpdating = True  
End Sub
 
RAN, спасибо Вам огромное!  
Работает как положено, правда я совсем не пойму, что этот хитрый макрос делает, понял только, что это какая-то игра двойным с окрытием и сохранением книги с другим именем.
 
А-а, дошло!!! Сохранить ее в *.xlsx, не поддерживающим макросы, а потом обратно в *.xls, уже с вырезанными напрочь макросами! Очень прикольное решение!  
В копилку!
Страницы: 1
Читают тему
Наверх