Excel VBA - обойти мой собственный код, который требует пароль для сохранения, или передать пароль от одного сабвуфера к другому - PullRequest
0 голосов
/ 14 марта 2020

У меня есть файл Excel с некоторыми сложными функциями, поэтому я настроил следующий код, чтобы некоторые мои коллеги не внесли непреднамеренных изменений, а затем сохранили файл. Просто, и это работает. К сожалению, я перехитрил себя.

Этот же файл требует периодических полуручных обновлений, которые извлекают информацию об имени файла с наших сетевых дисков. Я написал макрос, который выполняет это. Он запускается, когда пользователь нажимает кнопку. [Это полуручное руководство, потому что мы работаем на разных континентах, и хотя это обновление занимает 90 секунд во Франции, в США - 30 минут.] Это также работает.

Моя проблема в том, что я хочу, чтобы все могли запустить обновление макроса, а затем разрешить автоматическое сохранение файла после этого, но я не хочу выдавать пароль всем в группе. В настоящее время макрос обновления останавливается при достижении кода «beforesave». Есть ли способ либо

  1. обойти этот запрос пароля при запуске сохранения из макроса обновления, либо
  2. поместить пароль в макрос обновления таким образом, чтобы "beforesave" код распознает и примет его

Код:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

   Dim Password As String Dim EnteredPassword As String

   Password = "NOTMYACTUALPASSWORD" 
   EnteredPassword = InputBox("Enter password to save changes") 

   If EnteredPassword <> Password Then 
       Cancel = True 
       MsgBox ("Password incorrect, file not saved") 
   End If

End Sub

1 Ответ

0 голосов
/ 14 марта 2020

Вы не можете сказать Excel пропустить блок BeforeSave, но вы можете заставить свой код завершиться до того, как код перестанет сохраняться.

' In a new module
Public Update_Active As Boolean ' defaults to False when not set

' At the end of your update macro before save is called
Update_Enable = True

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

   If Update_Active Then
      Update_Active = False
      Exit Sub
   End If

   Dim Password As String Dim EnteredPassword As String

   Password = "NOTMYACTUALPASSWORD" 
   EnteredPassword = InputBox("Enter password to save changes") 

   If EnteredPassword <> Password Then 
       Cancel = True 
       MsgBox ("Password incorrect, file not saved") 
   End If

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