Блокировка проекта программно в VBA - PullRequest
0 голосов
/ 15 ноября 2018

На работе мы используем VBA, и в настоящее время они хотят заблокировать отчеты, которые мы генерируем с помощью макросов.

Я пытался заблокировать проект автоматически (с помощью пароля и имени рабочей книги), и мне частично это удалосьследующий кусок кода (смесь кодов, которые я нашел там и в некоторых вопросах в SO).Он каким-то образом делает то, что нужно делать вручную (собирая свойства vbaprojects и затем блокируя).

Sub LockVBAProject(nameWorkbookForMarket As String, pw As String)
   With Workbooks(nameWorkbookForMarket).Application
       '//execute the controls to lock the project\\
       .VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
       '//activate 'protection'\\
       .SendKeys "^{TAB}"
       '//CAUTION: this either checks OR UNchecks the\\
       '//"Lock Project for Viewing" checkbox, if it's already\\
       '//been locked for viewing, then this will UNlock it\\
       '//enter password (password is 123 in this example)\\
        .SendKeys "{ }"

       .SendKeys "{TAB}" & pw
       '//confirm password\\
       .SendKeys "{TAB}" & pw
       '//scroll down to OK key\\
       .SendKeys "{TAB}"
       '//click OK key\\
       .SendKeys "{ENTER}"
       'the project is now locked - this takes effect
       'the very next time the book's opened...
   End With
End Sub

Проблема этого кода в том, что иногда работает хорошо, а иногда нет.Я немного смущен этим «недетерминированным» поведением.Может ли кто-нибудь пролить свет на этот вопрос?

Спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Включите проверку, чтобы убедиться, что проект уже защищен / заблокирован, и не пытайтесь заблокировать его, если он уже заблокирован

If Workbooks(nameWorkbookForMarket).VBProject.Protection = 1 Then Exit Sub

Вы также хотите убедиться, что правильный проект активен,итак:

Set vbProj = Workbooks(nameWorkbookForMarket).VBProject

Set Application.VBE.ActiveVBProject = vbProj

If vbProj.Protection = 1 Then Exit Sub
' send keys

Альтернативный подход - разделить процесс отчетов на две части, сохранив код в отдельной рабочей книге.На мой взгляд, необычно, что новые отчеты / рабочие книги будут продолжать создаваться с кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...