Страницы: 1
RSS
Как скрыть от пользователя VBAProject после его разблокировки
 
Здравствуйте уважаемые жители форума :) . Уже наверное неделю пытаюсь решить проблему с разблокировкой  проекта VBA в Excel 2010. А теперь к сути проблемы:

Есть файл excel предназначен для работы, у него есть VBAproject(запороленный). В нем есть модули которые я хочу перед каждым открытием файла, обновлять (чтобы у всех кто пользуется экселем всегда была свежая сборка макросов если вдруг придется править).

Для того чтобы вносить изменения в VBAproject, а именно удалять или заменять модули необходимо разблокировать VBAproject я пользуюсь макросом на основе SendKeys, более стабильного способа разблокировки нету(из того на что натолкнулся в интернете).
Код
Sub UnprotectVBProject()
    Dim VBProj As Object

    Set VBProj = ThisWorkbook.VBProject
    'open VB
    Application.SendKeys "%{f11}"
    'send password
    Application.SendKeys "123", True
    Application.SendKeys "~", True
    VBProj.VBE.SelectedVBComponent.Activate

End Sub
И тут возникает вопрос: как после разблокировки VBAproject скрыть его от пользователей, чтобы пользователь не смог посмотреть макросы в проекте (не смог их изменить), ведь после разблокировки можно  смотреть все содержимое.

В интернете нашел решения: аля "защита от дурака" которое может только скрыть все меню во вкладке VBA:

Код
Private Sub UserInterfaceVBE()
    Dim iCommandBar As CommandBar, iWindow As Object
    For Each iCommandBar In Application.VBE.CommandBars
        iCommandBar.Enabled = False
    Next
    For Each iWindow In Application.VBE.Windows
        iWindow.Visible = False ' iWindow.Close
    Next
End Sub

При этом методе можно включить меню при помощи клавиш F2, F4 и тд.. Да и просто через список макросов можно изменить любой макрос.

Может будут какие то другие советы, в которых стоит подумать, покопать. :qstn:  
Изменено: Borgov - 17.08.2019 08:41:11
 
Установите пароль еще раз и пользователи не смогут вам что-то поломать в коде.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Установите пароль еще раз и пользователи не смогут вам что-то поломать в коде.
Здравствуйте. Не совсем так.
По сути, когда используется команда для разблокировки VBAproject  с использованием sendkey, пароль не снимается, он просто открывает каталог VBAproject словно вы сами вбили пароль и открыли и после этого вы можете лазить где угодно в проекте, ведь вы сделали процедуру ввода пароля.

И любой человек который после этого процесса работает в файле, и нажмет Ф11, зайдет в редактор вба увидит открытый код.
(если файл вновь закрыть и при открытие не использовать сендкей, пароль будет вновь активный)
(он работает почти также как когда вы впервые ставите пароль на VBAproject, у вас остается возможность изменять проект)

А как сделать чтобы этот католог стал вновь не активным, вот суть вопроса и VBA вновь не пускал тебя внутрь.
 
Цитата
Borgov написал:
зайдет в редактор вба увидит открытый код
мы говорим о последовательном или параллельном использовании файла? Юзер увидит код, только если вы сохраните изменения после снятия пароля
Изменено: buchlotnik - 17.08.2019 10:51:32
Соблюдение правил форума не освобождает от модераторского произвола
 
Доброе время суток
Цитата
Borgov написал:
По сути, когда используется команда для разблокировки VBAproject
Так и ответ простой. Чтобы действие пароля снова вступило в силу, нужно закрыть книгу, а потом снова её открыть - придёте снова к исходному состоянию - пароль ещё не введён
 
Андрей VG, согласен, так работать будет, только это получается надо дополнительно открывать, закрывать, что по сути на VBA работать не будет. а ведь хочется чтоб при любом открытие это можно было делать.

Цитата
buchlotnik написал: мы говорим о последовательном или параллельном использовании файла?
Мы говорим о последовательном.
Последовательность действий:
- Юзер открывает файл
- Происходит выполнение команды "Private Sub Workbook_Open()"
- В данной команде будет происходить: Разблокировка VBAproject при помощи SendKeys
- Далее будет меняться база Модулей проекта на новую.
- И после этого Юзер работает в файле до его закрытия, и все повторяется вновь.

И как раз наоборот есть сохранить файл то в нем будут применены все изменения, и пароль будет вновь активным
 
Цитата
Borgov написал:
- В данной команде будет происходить: Разблокировка VBAproject при помощи SendKeys- Далее будет меняться база Модулей проекта на новую.
что мешает просто сделать надстройку и тянуть её модули по ссылке?
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
что мешает просто сделать надстройку и тянуть её модули по ссылке?
Наверное то что мало знаю надстройки, и пока даже не представляю, как можно было бы обезопасить код при работе с ними, от копирования или использования где либо еще
 
Цитата
Borgov написал:
И как раз наоборот есть сохранить файл то в нем будут применены все изменения, и пароль будет вновь активным
Исходите из того, что предоставляет вам система. Хотите поведения как вам хочется, нужно тогда менять систему или подход. И в рамках изменения подхода - прислушайтесь к совету коллеги buchlotnik.
Более того - этот подход с надстройкой обсуждался уже не раз обсуждался на форуме.
Делаете надстройку, кладёте её на общий ресурс, доступный обычным пользователям только на чтение. Подключаете надстройку у пользователей. Надо изменить что-то в надстройке, просто заменяете доработанный файл надстройки (естественно, когда пользователи не работают).
 
Borgov,
в интернете вывалено мегатонны макросов
удавалось вам найти такой, который полностью решает Вашу задачу от А до Я?
ровно на столько же Ваш код подойдет кому-то другому
и... взгляните критичнее на свой код, как бы со стороны, может все не настолько ценно, чтобы несколько месяцев ломать себе голову над способом защиты, которого по факту все еще нет
и по написанному выше, код уже обновлялся и планируется продолжать его обновлять. это странно, как по мне, я предпочитаю что-то написать, забыть и больше к этому не возвращаться, но это как раз, увеличивает Вашу ценность, как программиста, который знаком с кодом и может его исправить в короткие сроки.
Изменено: Ігор Гончаренко - 17.08.2019 12:30:14
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Borgov написал:
было бы обезопасить код при работе с ними,
запаролить
Цитата
Borgov написал:
или использования где либо еще
указать в коде явно имя книги
Страницы: 1
Наверх