Здравствуйте уважаемые жители форума . Уже наверное неделю пытаюсь решить проблему с разблокировкой проекта 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 и тд.. Да и просто через список макросов можно изменить любой макрос.
Может будут какие то другие советы, в которых стоит подумать, покопать.
bedvit написал: Установите пароль еще раз и пользователи не смогут вам что-то поломать в коде.
Здравствуйте. Не совсем так. По сути, когда используется команда для разблокировки VBAproject с использованием sendkey, пароль не снимается, он просто открывает каталог VBAproject словно вы сами вбили пароль и открыли и после этого вы можете лазить где угодно в проекте, ведь вы сделали процедуру ввода пароля.
И любой человек который после этого процесса работает в файле, и нажмет Ф11, зайдет в редактор вба увидит открытый код. (если файл вновь закрыть и при открытие не использовать сендкей, пароль будет вновь активный) (он работает почти также как когда вы впервые ставите пароль на VBAproject, у вас остается возможность изменять проект)
А как сделать чтобы этот католог стал вновь не активным, вот суть вопроса и VBA вновь не пускал тебя внутрь.
Borgov написал: По сути, когда используется команда для разблокировки VBAproject
Так и ответ простой. Чтобы действие пароля снова вступило в силу, нужно закрыть книгу, а потом снова её открыть - придёте снова к исходному состоянию - пароль ещё не введён
Андрей VG, согласен, так работать будет, только это получается надо дополнительно открывать, закрывать, что по сути на VBA работать не будет. а ведь хочется чтоб при любом открытие это можно было делать.
Цитата
buchlotnik написал: мы говорим о последовательном или параллельном использовании файла?
Мы говорим о последовательном. Последовательность действий: - Юзер открывает файл - Происходит выполнение команды "Private Sub Workbook_Open()" - В данной команде будет происходить: Разблокировка VBAproject при помощи SendKeys - Далее будет меняться база Модулей проекта на новую. - И после этого Юзер работает в файле до его закрытия, и все повторяется вновь.
И как раз наоборот есть сохранить файл то в нем будут применены все изменения, и пароль будет вновь активным
Borgov написал: - В данной команде будет происходить: Разблокировка VBAproject при помощи SendKeys- Далее будет меняться база Модулей проекта на новую.
что мешает просто сделать надстройку и тянуть её модули по ссылке?
Соблюдение правил форума не освобождает от модераторского произвола
buchlotnik написал: что мешает просто сделать надстройку и тянуть её модули по ссылке?
Наверное то что мало знаю надстройки, и пока даже не представляю, как можно было бы обезопасить код при работе с ними, от копирования или использования где либо еще
Borgov написал: И как раз наоборот есть сохранить файл то в нем будут применены все изменения, и пароль будет вновь активным
Исходите из того, что предоставляет вам система. Хотите поведения как вам хочется, нужно тогда менять систему или подход. И в рамках изменения подхода - прислушайтесь к совету коллеги buchlotnik. Более того - этот подход с надстройкой обсуждался уже не раз обсуждался на форуме. Делаете надстройку, кладёте её на общий ресурс, доступный обычным пользователям только на чтение. Подключаете надстройку у пользователей. Надо изменить что-то в надстройке, просто заменяете доработанный файл надстройки (естественно, когда пользователи не работают).
Borgov, в интернете вывалено мегатонны макросов удавалось вам найти такой, который полностью решает Вашу задачу от А до Я? ровно на столько же Ваш код подойдет кому-то другому и... взгляните критичнее на свой код, как бы со стороны, может все не настолько ценно, чтобы несколько месяцев ломать себе голову над способом защиты, которого по факту все еще нет и по написанному выше, код уже обновлялся и планируется продолжать его обновлять. это странно, как по мне, я предпочитаю что-то написать, забыть и больше к этому не возвращаться, но это как раз, увеличивает Вашу ценность, как программиста, который знаком с кодом и может его исправить в короткие сроки.