Страницы: 1
RSS
Удаление макроса с помощью другово макроса по условию.
 
Удаление макроса с помощью другово макроса по условию.
 
{quote}{login=Nik_1}{date=06.08.2009 05:59}{thema=Удаление макроса с помощью другово макроса по условию.}{post}Удаление макроса с помощью другово макроса по условию.{/post}{/quote}  
 
Слетело сообщение пишу, заново.  
 
Есть файл с макросами, нужно написать макрос который бы при наступлении скажем определённой даты удалил бы 1 или всё макросы из файла.  
Как это можно реализовать?
 
http://www.cpearson.com/excel/VBE.aspx
KL
 
{quote}{login=The_Prist}{date=06.08.2009 06:03}{thema=}{post}Это констатация факта?  
Опишите подробней, чего хотите. Удаление по какому условию? Какого макроса? Одного?{/post}{/quote}  
 
Хочу, что бы при наступлении даты 01.10.2010г из книги был удалён макрос отправляющий данные на печать. Имя макроса "Печать".  
Sub Печать()  
'  
' Печать Макрос  
' Макрос записан 04.08.2009 (ekozlova)  
'  
   Sheets("Лист1").Select  
   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  
   Sheets("Форма").Select  
End Sub
 
The_Prist, огромнейшее спасибо.  
Теперь нас так просто не возьмёшь.:)
 
{quote}{login=KL}{date=06.08.2009 06:08}{thema=}{post}http://www.cpearson.com/excel/VBE.aspx{/post}{/quote}  
 
KL, выражаю благодарность, очень занимательный сайт.
 
Первый вирус готов... :-)
 
Надо бы уточнить, что для того, чтобы макросы манипулирующие объектами VBEProject могли работать, необходимо поставить галку в опции "Доверять доступ к объектной модели VBAProject" или как там в русском варианте ;-)
KL
 
XL2003 Меню Сервис-Макрос-Безопасность..., закладка "Надежные издатели", опция "Доверять доступ к Visual Basic Project"  
 
XL2007 на русском у меня не установлен, а на английском:  
Круглая кнопка с логотипом Office слева в самом верху, Excel Options, слева закладка "Trust Center", кнопка "Trust Center Settings...", опция "Trust acces to the VBA project object model"
KL
 
Столкнулся с тем, что самому понадобилась такая 'фича'. B связи с этим и пара вопросов.  
 
The_Prist, пожалуйста, подскажите, как корректно прописать удаление только определённого макроса(ов), листа(ов)?  
 
If ThisWorkbook.VBProject.Protection = 1 Then '???'  
 
'???'  
 
И в случае защиты VBA Project, как поставить (известный) пароль и выполнить процедуру?  
 
Заранее благодарен.
[*]<a href="mailto:info@ledrex\";>
 
полюбому такая штука используеться например для предоставления демоверсии файла, а например через 5 дней макрос уничтожиться, и вуаля файл становиться бесполезен...
Оружие не убивает Человека! Человек убивает Человека!!!
 
Добрый день, спасибо за подсказку. Да, Вы правы The_Prist имел в виду процедуру(ы). У меня после генерации отчётов файлы разбухают до нескольких Mb, вот я подумал, что после определённого срока, когда макросы уже не нужны, а информация требуется, лишнее удалять. Mожно через ComboBox-ы на листе ставить дату когда срок будет уже не актуален. Удобно, и для менеджера и для  
агента (работника).  
P.S. снятие пароля дома посмотрю, здесь кроме как на "Планету", доступа нет.
[*]<a href="mailto:info@ledrex\";>
 
А можно ли еще удалить выпадающие списки в ячеках ?
 
А это какое отношение имеет к затронутой теме? :)  
 
Поиск "удалить выпадающий список", сразу первая тема - http://www.planetaexcel.ru/forum.php?thread_id=14230
<FONT COLOR="CadetBlue">
 
хотелось бы все сразу удалить и макросы и выпадающие списки по наступлению определенной даты :)
 
А если книга защищена и пароль известен ? можно ли вписать в работу макроса ?
 
т.е. не книга защищена, а VBA модуль. Пароль известен.
 
Sub Delete_All_Code_And_Macro_in_ActiveBook()    
Dim wb As Workbook    
   Dim vbp As VBProject    
 
   Set wb = ThisWorkbook    
   Set vbp = wb.VBProject    
 
   If vbp.Protection <> 1 Then Exit Sub    
   Set Application.VBE.ActiveVBProject = vbp    
 
   SendKeys "password" & "~~"    
       
   Application.VBE.CommandBars(1).FindControl(ID:=2578, _    
     recursive:=True).Execute  
End If  
Dim oVBComponent As Object  
For Each oVBComponent In ThisWorkbook.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 'ЭтаКнига, Листы  
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines  
End Select  
End With  
Next  
End Sub
 
Не работает вот эта конструкция, подскажите пожалуста, что тут может быть не правильно.  
Public Sub UnprotectVBAProject()    
   Dim wb As Workbook    
   Dim vbp As VBProject    
 
   Set wb = ThisWorkbook    
   Set vbp = wb.VBProject    
 
   If vbp.Protection <> 1 Then Exit Sub    
   Set Application.VBE.ActiveVBProject = vbp    
 
   SendKeys "password" & "~~"    
       
   Application.VBE.CommandBars(1).FindControl(ID:=2578, _    
     recursive:=True).Execute    
   MsgBox ("Защита проекта отключена")  
End Sub
 
Огромное спасибо The_Prist. Если бы не Вы, я бы не сделал) Хоть у меня и ушло 3 дня на догадки, но все таки лучше самому делать медленно и учиться чем пользоваться готовым)  
 
Sub Auto_Open()  
If Date >= DateValue("10.08.2008") Then Call DeleteModulesAndCode  
End Sub  
 
 
Sub DeleteModulesAndCode()  
 
Dim wb As Workbook  
Dim vbp As Object  
 
Set wb = ThisWorkbook  
Set vbp = wb.VBProject  
 
If vbp.Protection <> 1 Then Exit Sub  
Set Application.VBE.ActiveVBProject = vbp  
 
SendKeys "aku333taf" & "~~"  
 
Application.VBE.CommandBars(1).FindControl(ID:=2578, _  
recursive:=True).Execute  
 
DoEvents  
Dim oVBComponent As Object  
For Each oVBComponent In ThisWorkbook.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 'ЭтаКнига, Листы  
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines  
End Select  
End With  
Next  
ActiveWorkbook.Save  
End Sub
Страницы: 1
Читают тему
Наверх