Страница 1 из 2

доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 00:04
jaroslav
Всем привет. Хочу включить "доверять доступ к Visual Basic Project" в Excel 2003 через меню. Надо переключиться с вба в книгу екселя, в которой написан этот макрос, нажать Alt+е (русское), далее а (русское), далее Alt+м (русское), Alt+в (русское), потом 2 раза кнопку OK. Но перед этим нужно проверить стоит ли галочка возле "доверять доступ к Visual Basic Project".
Ребята, помогите, пожалуйста. Обыскал все форумы. Иных способов включить доступ к Visual Basic Project не нашел (параметр реестра AccessVBOM = 1 не подходит, потому что не ставится галочка в ексель возле "доверять доступ к Visual Basic Project").

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 08:38
pashulka
jaroslav, Стесняюсь спросить, а где в XL2003 Вы вообче нашли "доверять доступ к объектной модели проектов VBA" ?

Может быть речь идёт о меню Сервис пункт Макрос команда Безопасность, закладка Надежные источники и "флажок" Доверять доступ к Visual Basic Project

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 09:44
jaroslav
Да, pashulka, Вы правы. Я ошыбся

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 10:17
pashulka
Дык, если нужно изменить значение параметра через меню, то чем Вас не устраивает предложенный мною способ ? Если слишком много операций, то команду Безопасность можно перетащить/скопировать на какую нибудь панель инструментов, например, Строка меню листа.

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 10:52
jaroslav
Пишу программу на вба, которая будет включатся на 100 разных компьютерах. Хотел бы, чтобы по завершении работы этой программы все макросы из активной книги были удалены. Если на этих компах не будет стоять флажок "Доверять доступ к Visual Basic Project", я не смогу удалить все макросы из активной книги.

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 11:35
pashulka
Теперь всё стало гораздо понятнее :) что касается решения, то если макросы являются Вашей собственностью и все они должны располагаться в стандартных модулях , то в таком случае их можно удалить и без соответствующей галочки, если же книга "замусорена" всевозможными диалоговыми окнами, модулями классов, то можно просто удалить всю книгу, т.е.

Код: Выделить всё

Private Sub Test()
    With ThisWorkbook
         .ChangeFileAccess Mode:=xlReadOnly
         Kill PathName:=.FullName
         .Close saveChanges:=False
    End With
End Sub

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 11:51
jaroslav
У меня есть такой код:

Код: Выделить всё

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
Книгу удалять нельзя. В ней есть результаты работы программы. В этой книге есть макрос Auto_open в ЭтаКнига и 2 модуля, в 1 из них расположен вышенаведенный макрос. Подскажите, пожалуйста, как в таком случае удалить все макросы из книги. Проблема в том, что я не могу воспользоваться этим макросом без флажка "Доверять доступ к Visual Basic Project"

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 11:59
pashulka
Макрос Auto_Open должен располагаться в стандартном модуле, в этом случае, его можно будет удалить.

Если же речь идёт о модуле книги ThisWorkbook(ЭтаКнига) и, соответственно, событии Workbook_Open(), то метод удаления модулей, в этом случае, в принципе работать не будет.

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 12:07
jaroslav
У меня действительно прописано Workbook_Open в ЭтаКнига. Какие возможные способы решение этой проблемы?

Re: доверять доступ к объектной модели проектов VBA

Добавлено: 09 май 2014, 12:34
pashulka
Заменить событие Workbook_Open на макрос Auto_Open и воспользоваться следующим советом.

Или вывести результаты работы программы в другую рабочую книгу (созданную программно), а рабочую книгу, содержащую макросы, удалить вышеопубликованным способом.

P.S. Необходимо всё же уточнить, что удаление модулей, мягко говоря, слабо связано с защитой программы, ибо любой, кто получит Вашу книгу, сможет сделать копию (до первого открытия) и при возникновении интереса, просто откроет копию (например, отключив макросы) и доберется до модулей (даже при наличии защиты VBProject)