Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Удаление макроса Добавлено: 22.10.07 22:41  

Автор вопроса:  DrugON | ICQ: nospam 
Здравствуйте. Возник вопрос программного удаления макроса. Делаю ежесуточные отчеты в Excel, они и сами по себе достаточно весомые, из-за присутсвия модулей с макросами, соответственно, становятся еще больше. Размер файла приближается к размеру лимита размера письма, так что что-то нужно делать, аот и возникла идея - перед отправкой удалять модули с макросами... Файл "легчает" где-то на полметра. Но делать это вручную очень нудно, а как это сделать программно - ума не приложу. ВОзможно ли это вообще?
Заранее всем ответившим спасибо!

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #1
Добавлено: 23.10.07 00:11
Однажды я сделал для себя (правда не помню, удаляются ли модули класса и формы, но стандарные модули и код из модулей листов и книги - удаляются точно):

Sub ClearAllMacroses()
'удаляет макросы и процедуры из активной книги
'(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-сайт: www.genyaa.nm.ru
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #9
Добавлено: 29.12.07 08:49
Интересно, а перед отправкой Excel-файлы ты сжимаешь. Прежде чем возиться с удалением макросов я бы написал .bat-макрос для архиватора (я использую rar.exe с параметрами командной строки, но можно бы и другой, бесплатный архиватор).

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам