Страница: 1 |
Страница: 1 |
Вопрос: Удаление макроса
Добавлено: 22.10.07 22:41
Автор вопроса: DrugON | ICQ: nospam
Здравствуйте. Возник вопрос программного удаления макроса. Делаю ежесуточные отчеты в Excel, они и сами по себе достаточно весомые, из-за присутсвия модулей с макросами, соответственно, становятся еще больше. Размер файла приближается к размеру лимита размера письма, так что что-то нужно делать, аот и возникла идея - перед отправкой удалять модули с макросами... Файл "легчает" где-то на полметра. Но делать это вручную очень нудно, а как это сделать программно - ума не приложу. ВОзможно ли это вообще?
Заранее всем ответившим спасибо!
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #1
Добавлено: 23.10.07 00:11
Однажды я сделал для себя (правда не помню, удаляются ли модули класса и формы, но стандарные модули и код из модулей листов и книги - удаляются точно):
'удаляет макросы и процедуры из активной книги
'(c) Genyaa[coбака]nm.ru (2007)
Dim vc As Object
If MsgBox("Удалить все макросы из активной книги?", vbYesNo) = vbNo Then Exit Sub
If MsgBox("Уверен?!" & vbCrLf & _
"Будут удалены все макросы, модули и формы книги: " & ActiveWorkbook.Name, vbYesNo) = vbNo Then Exit Sub
With ActiveWorkbook.VBProject
For Each vc In .VBComponents
If vc.Type <> 100 Then
.VBComponents.Remove vc
End If
Next vc
For Each vc In .VBComponents
vc.CodeModule.DeleteLines 1, vc.CodeModule.CountOfLines
Next vc
End With
End Sub
Номер ответа: 2
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #2
Добавлено: 23.10.07 02:08
Огромный респектище! Отлично работает!!!
Правда, не работает в том случае, если проект защищен паролем, но это для меня не столь важно.
Кстати, по поводу снятия защиты проекта - очень примитивно я эту проблему решил (естественно, пароль я знаю), но пугает то, что все основано на тупых SendKeys. Может быть есть какие-то другие варианты?
Номер ответа: 3
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #3
Добавлено: 07.12.07 06:56
Придется создать новый топик, раз никто про варианты гворить не хочет
Номер ответа: 4
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #4
Добавлено: 07.12.07 09:56
Снять защиту проекта программно не получится... Это можно сделать именно только через sendkeys, что я не могу назвать программным способом, а скорее "почти ручное управление приложением с автоматизированным управлением ее интерфейсом".
Номер ответа: 5
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #5
Добавлено: 17.12.07 00:07
Это утверждение или предположение? С каждым днем все больше растет уверенность в том, что невозможного ничего нет ...
Как у Демобелана
Номер ответа: 6
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #6
Добавлено: 17.12.07 02:46
в общем я нашел способ программно снять защиту проекта. Естественно, пароль известен...
Сейчас VBE занят сильно поэтому чуть позже напишу код...
Номер ответа: 7
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #7
Добавлено: 19.12.07 12:46
Public Sub ImpossibleIsPossible()
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
Да, без SendKeys не обошлось, но я не вижу другого способа ввести пароль. Считаю, что этот код можно считать программным способом снятия защиты проекта.
Номер ответа: 8
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #8
Добавлено: 19.12.07 12:49
Сорри, забыл, нужно еще подключить библиотеку Microsoft Visual Basic for Application Extensibiliy.
Номер ответа: 9
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #9
Добавлено: 29.12.07 08:49
Интересно, а перед отправкой Excel-файлы ты сжимаешь. Прежде чем возиться с удалением макросов я бы написал .bat-макрос для архиватора (я использую rar.exe с параметрами командной строки, но можно бы и другой, бесплатный архиватор).